240 发简信
IP属地:北京
  • @weilianlei
    while ( !initialized) {
    sleep();
    }
    和AB线程谁先执行没关系,B线程在循环等待A线程的initialized=true。如果A线程有序执行到initialized=true,那么B线程读取配置就不会出现null

    深入理解Java内存模型

    java内存模型(Java Memory Model,JMM)是java虚拟机规范定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现j...

  • 120
    最详细的vue-socket.io用法

    通过最近一系列的踩坑之后,总结出了这篇相对较为完善的关于vue-socket.io的使用文章,包含大家困扰的(socket连接、断开重连,以及当连接的地址是动态的情况下,...

  • 最近研究源码,也对Future、Runnable、Callable的关系比较好奇。感觉最初设计的时候,Future是和Callable配合一起工作的,但是由于早期版本Runnable已经存在,设计者需要将Future与Runnable也变得可以一起使用,所以采用了RunnableAdapter。而FutureTask启到的作用是作为Future与Runnable的桥梁。也就是你前文所讲述的系列关系。 至于这个result何时被赋值?
    其实很简单,FutureTask有两个构造方法。通过Runnable构造成的FutureTask,result始终是null。而通过Callable构造成的FutureTask,result就是Callable.call()的返回值。

    Callable、Future、FutureTask、Runnable

    目标 一、Callable、Future、FutureTask、Runnable的关系 1.1 Callable 1.2 Future 1.3 RunnableFuture ...

  • 120
    Callable、Future、FutureTask、Runnable

    目标 一、Callable、Future、FutureTask、Runnable的关系 1.1 Callable 1.2 Future 1.3 RunnableFuture ...