FutureTask
能异步绝不同步,能并行绝不串行 1.??Future 一个Future代表一个异步计算的结果。Future提供检查计算是否完成、等待计算完成并获取计算结果的方法。只有当计算完成以后,才可以使用get方法检索结果,否则将会阻塞直到计算完成。通过调研cancel方法可以取消执行。另外,还提供了检查任务是正常完成还是被取消的方法。一旦计算完成,这个计算不能被取消。 简单用法: 1 public class App {
2 ExecutorService executorService = Executors.newFixedThreadPool(3);
3 ArchiveSearcher searcher = new ArchiveSearcher();
4
5 void showSearch(final String target) throws InterruptedException 6 Future<String> future executorServicesubmitCallable>() 7 public String call() 8 return searchersearch( 9 }
10 });
11
12 displayOtherThings(); // do other things while searching
13
14 try 15 displayTextfutureget()); // use future
16 } catch ExecutionException ex) {
17 cleanup();
18 return;
19 20 21 }
FutureTask类是Future的实现,它同时也实现了Runnable,因此也可以被Executor执行。例如,上面的代码可以被改写成如下: 1 FutureTask>(2 3 4 5 6 executorexecute);
2.? FutureTask?
一个FutureTask可以用来包装一个Callable或Runnable对象。因为FutureTask实现了Runnable接口,一个FutureTask可以被提交给一个Executor来执行。? 3.? 示例 1 package comcjsexample;
2
3 import java.util.concurrent.* 5 /**
6 * @author ChengJianSheng
7 * @date 2019-05-22
8 */
9 10
11 static main[] argsException 12
13 long t1 SystemcurrentTimeMillis14
15 16
17 heatUpWaterFuture 18 @Override
19 () 20 outprintln("烧开水..."21 Threadsleep300022 return "ok"23 24 25
26
27 cookMealsFuture 28 29 30 "煮饭..."31 500032 33 34 35
36 heatUpWaterFuture37 cookMealsFuture38
39 "炒菜..."40
41 200042
43 "菜炒好了了"44
45 if , TimeUnitSECONDS== "ok"
46 && 47 "开饭了..."48 49
50 t2 51 "做饭用时:" + t2-t1+ "ms"52
53 54 }?
输出 1 烧开水...
2 煮饭...
3 炒菜...
4 菜炒好了了
5 开饭了...
6 做饭用时:5014ms?
在实际开发过程中,将那些耗时较长,且可以并行的操作都封装成一个FutureTask(比如:有的数据通过调用dubbo服务获取,有的数据需要从缓存中读取,有的数据需要复杂的计算)? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Spring中property-placeholder的使用与解析详解
- java – 使用volatile和synchronized时,刷新或发
- java-ee – 未调用启动bean
- java – ArrayList的特殊行为remove() – 为什么
- java – 使用Ant构建一个包含ActionbarSherlock作
- Java 8 lambda Collectors.groupingBy with Coll
- java – 比较器比较
- java – ThreadLocal;是不是每次创建变量的副本都
- java – 从HashMap中删除时为什么会出现Concuren
- java – 如何在没有StringTokenizer的字符串中替