标签:cell 线程 run cas 方法 调用exe 存储 task one
boolean cancel(
boolean isCancelled();
boolean isDone();
V get()
-----------------------实现future接口的类(都叫做一个task,因为是一个任务一段逻辑),一般都会被放到一个线程里,但是新开线程的执行是异步的,但是如果此时要获取线程执行的结果,就需要基于cas+volatile,实现future接口,看看这个逻辑走完了没。
比如isdone方法,取消,还有get方法看结果。
实现的类一般都会有一个status(volatile的),一个outcome用来存储结果,还有一个callable引用,指向一个实现了callable接口的对象,这个对象重写call方法,而实现Future接口的类 如果实现了, 实现Runnable接口(RunnableFuture接口),会重写其中的run方法。
run方法中一般会调用call方法,call方法和run方法不同的是,它有返回值,那么就可以赋值给outcome,然后根据状态,来进行线程之间的通信。比如:FutureTask
当然,实现了Future接口的类也可以不实现runnable接口,而由线程池调用它的call方法。比如ForkJoinTask RecursiveTask。forkjoinPool的invoke方法是调用 task的invoke方法。forkjointask 的invoke 方法调用exec(),继承的RecursiveTask方法重写了exec(),调用一个
compute方法,返回值赋值给result(通过调用getResult类似的方法,而recursive方法重写了该方法,返回的是recursivetask的属性result(泛型))
标签:cell 线程 run cas 方法 调用exe 存储 task one
原文地址:http://www.cnblogs.com/chuliang/p/7753442.html