基本原理 首先FutureTask早期使用AQS来实现。目前的版本(java 7)是将所有状态用一个volatile的int来保存。并且使用unsafe的cas来进行修改。当然如果使用一个Atomic类也可以。但是使用unsafe效率更高。 状态介绍 private static final int NEW = 0;private static final int
最近在阅读FutureTask的源码是发现了一个问题那就是源码中封装结果的字段并没有使用volatile修饰,源码如下: public class FutureTask<V> implements RunnableFuture<V> {/*** 状态变化路径* Possible state transitions:* NEW -> COMPLETING -> NORMAL* NEW -> COM