同步工具类二:可取消异步计算(java.util.concurrent.FutureTask)
来源:互联网 发布:电子数据侦查取证ppt 编辑:程序博客网 时间:2024/06/03 20:59
FutureTask是一个可取消的异步计算(A cancellable asynchronous computation.)
FutureTask可处于等待运行、正在运行和运行完成这3种状态,运行完成包括所有可能的结束方式:正常结束、由于取消而结束和异常运行结束,FutureTask进入运行完成状态后,将永远处于该状态
示例一:FutureTask的简单示例(调用FutureTask的run方法使其开始运行,也可将其封装至Thread中通过调用Thread的start方法间接调用FutureTask的run方法)
import java.util.concurrent.Callable;import java.util.concurrent.FutureTask;public final class MyFutureTask<V> extends FutureTask<V> {public MyFutureTask(Callable<V> callable) {super(callable);}//当任务进入运行结束状态,无论是正常结束、取消任务还是异常结束//都将会调用该方法@Overrideprotected void done() {if(this.isDone()){System.out.println("MyFutureTask is over!");}}}
import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;public class Task{private MyFutureTask<Integer> ft = new MyFutureTask<Integer>(new Callable<Integer>() {public Integer call() throws Exception {return new Integer(0);};});private Thread t = new Thread(ft);public void run(){t.start();}public Integer get() throws InterruptedException, ExecutionException{//get()方法的运行方式取决于任务的状态//如果任务已经完成,则直接返回结果//如果任务正在运行中,则阻塞直到任务完成return ft.get();}public boolean cancel(){//尝试取消任务,如果任务处于运行结束状态或由于其它某些原因//无法取消,则尝试失败return ft.cancel(true);}public boolean isDone(){return ft.isDone();}public static void main(String[] args) throws InterruptedException, ExecutionException {Task task = new Task();//如果运行任务时任务处于运行结束状态则会报线程状态异常://java.lang.IllegalThreadStateExceptionif(!task.isDone()){task.run();}Thread.sleep(1000);//此时任务已经完成,故取消失败System.out.println(task.cancel());System.out.println("result:" + task.get());}}
运行结果如下:
MyFutureTask is over!falseresult:0
示例二:使用FutureTask实现的高效结果缓存
http://blog.csdn.net/a19881029/article/details/37602681
0 0
- 同步工具类二:可取消异步计算(java.util.concurrent.FutureTask)
- java.util.concurrent.FutureTask
- 同步工具类一:闭锁(java.util.concurrent.CountDownLatch)
- 同步工具类一:闭锁(java.util.concurrent.CountDownLatch)
- java.util.concurrent之FutureTask
- java.util.concurrent.CyclicBarrier同步屏障工具类源码解析
- 同步工具类三:计数信号量(java.util.concurrent.Semaphore)
- Java.util.concurrent包学习(二)线程同步控制相关的类
- Java.util.concurrent包学习(二)线程同步控制相关的类 (
- Java.util.concurrent包学习(二)线程同步控制相关的类
- at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
- 同步辅助类 java.util.concurrent.CountDownLatch
- 同步辅助类 java.util.concurrent.CyclicBarrier
- java多线程学习-java.util.concurrent详解(二)Semaphore/FutureTask/Exchanger
- java多线程学习-java.util.concurrent详解(二)Semaphore/FutureTask/Exchanger
- java多线程学习-java.util.concurrent详解(二)Semaphore/FutureTask/Exchanger
- java多线程学习-java.util.concurrent详解(二)Semaphore/FutureTask/Exchanger
- java多线程学习-java.util.concurrent详解(二)Semaphore/FutureTask/Exchanger
- Swiper说明&&API手册
- android EditText如何禁止输入内容
- 关于定时器
- 参与征文,上头条,拿酷炫智能奖品!
- oracle存储过程常用技巧
- 同步工具类二:可取消异步计算(java.util.concurrent.FutureTask)
- Android API等级和版本对应
- 地理信息大数据的新载体_徐丽萍
- 使用NetFlow分析网络异常流量
- 显示用户触摸持续的时间
- yyyyMMddhhmmss(20140707103709)转换为yyyy-MM-dd HH:mm:ss(2014-07-07 10:37:09)
- 在线pdf转换成word转换器怎么样
- Android Studio Beta 0.8.0 Failure [INSTALL_FAILED_OLDER_SDK]
- 远程桌面