The example of Using Executors
来源:互联网 发布:java闰年的判断 编辑:程序博客网 时间:2024/04/30 13:36
In one thread invokes other threads to do computations. ExecutorService.InvokeAll() would block the result,直到所有的task都complete(或者正常结束,时间到,或者抛出异常),最后返回一个Future Task List, 所以这个List中的Future Taks中的isDone都是true,而InvokeAny只要一个成功完成了就会返回,其他的task将会被取消,注意这里和invokeAll的不同点,invokeALL是判断task完成是包含有异常抛出的情况的,而invokeAny只会收到任务成功完成一个的情况而异常抛出情况不算, while the ExecutorService.submit() would not.
import java.util.ArrayList;import java.util.Date;import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class TestFuture {/** * @param args */public static void main(String[] args) {TestFuture fu=new TestFuture();fu.syncData();}public void syncData(){ try { ExecutorService executor =Executors.newCachedThreadPool(); SyncAction one=new SyncAction("oneSync"); SyncAction two=new SyncAction("twoSync"); System.out.println("syncRes Before submit = @"+new Date(System.currentTimeMillis())); Future<String> futureOne = executor.submit(one); Future<String> futureTwo = executor.submit(two); // List<Future<String>> futures= executor.invokeAll(syncTasks); ArrayList<Future<String>> syncTasks=new ArrayList< Future<String>>(); syncTasks.add(futureOne); syncTasks.add(futureTwo); System.out.println("syncRes Before getDone = @"+new Date(System.currentTimeMillis())); for(Future<String> aFu: syncTasks){ while(!aFu.isDone()){ System.out.println("syncRes UnDone = @"+new Date(System.currentTimeMillis())); Thread.sleep(1000); } if(aFu.isDone()){ String syncRes=aFu.get(); System.out.println("syncRes="+syncRes+" @"+new Date(System.currentTimeMillis())); } }} catch (Exception e) {e.printStackTrace();}} private class SyncAction implements Callable<String>{ private String name; public SyncAction(String name) {super();this.name = name;}@Overridepublic String call() throws Exception {int i=0; while(i<3){ Thread.sleep(2000); i++; } System.out.println(name+" finished:"+new Date(System.currentTimeMillis()));return "OK";} }}
syncRes Before submit = @Mon Nov 21 10:48:41 CST 2011syncRes Before getDone = @Mon Nov 21 10:48:41 CST 2011syncRes UnDone = @Mon Nov 21 10:48:41 CST 2011syncRes UnDone = @Mon Nov 21 10:48:42 CST 2011syncRes UnDone = @Mon Nov 21 10:48:43 CST 2011syncRes UnDone = @Mon Nov 21 10:48:44 CST 2011syncRes UnDone = @Mon Nov 21 10:48:45 CST 2011syncRes UnDone = @Mon Nov 21 10:48:46 CST 2011syncRes UnDone = @Mon Nov 21 10:48:47 CST 2011oneSync finished:Mon Nov 21 10:48:47 CST 2011twoSync finished:Mon Nov 21 10:48:47 CST 2011syncRes=OK @Mon Nov 21 10:48:48 CST 2011syncRes=OK @Mon Nov 21 10:48:48 CST 2011
if use List<Future<String>> futures= executor.invokeAll(syncTasks); the result would be this
syncRes Before submit = @Mon Nov 21 10:48:41 CST 2011oneSync finished:Mon Nov 21 10:48:47 CST 2011twoSync finished:Mon Nov 21 10:48:47 CST 2011syncRes=OK @Mon Nov 21 10:48:48 CST 2011syncRes=OK @Mon Nov 21 10:48:48 CST 2011
- The example of Using Executors
- Simple example of using the Java Native Interface(JNI)
- an example of using automake.
- An example of using Thrift
- the case shell AND example of using case to create a menu
- An easy example of using AJAX
- An example of using STL multimap
- example of using ajax in VisualForce page
- example of using ActionFunction in Salesforce
- Example of the SO_REUSEADDR Option
- The using of import
- The using of stack
- 【Java多线程】之十二:Java Thread Pool Example using Executors and ThreadPoolExecutor
- Example Source Code: Using Face Detection To Create The Illusion Of Real 3D On iOS Devices
- One of the MVC example , Struts.
- Example uses of the Linux Command ftp
- Example uses of the Linux Command ftp
- Example uses of the command "more"
- 并查集
- java线程之Thread(大部分内容来自于think in java 3th,Bruce Eckel)
- 无密码验证ssh连接设置
- testetsetsetestsets
- ffmpeg和SDL指南2---输出到屏幕
- The example of Using Executors
- autotest server使用
- visual studio恢复默认设置的方法
- MYSQL 删除列,增加列 alter table
- VS2010帮助文档换位置
- ajax介绍
- oracle sqlplus @@用法
- Sql Server 数据库恢复和日志文件的详细介绍
- static的详解