基本原理 首先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
从Java SE 5.0开始引入了Callable和Future,通过它们构建的线程,在任务执行完成后就可以获取执行结果. FutureTask可用于异步获取执行结果或取消执行任务的场景。通过传入Runnable或者Callable的任务给FutureTask,直接调用其run方法或者放入线程池执行,之后可以在外部通过FutureTask的get方法异步获取执行结果,因此,FutureTask非