多线程协作完成任务时用?如IO异步编程?
package thread.pool; import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; /** * Only proceed if all tasks are completed 1. 当所有任务都执行完成后,做某事 */ public class Concurrent_Callable { public static void main(String[] args) { ExecutorService threadPool = Executors.newFixedThreadPool(3); //使用Future接收任务执行后的结果 Future<Object> future = threadPool.submit(new MyTask("task1")); try { Object result = future.get(); //pass result to another processor System.out.println("Result is :" + result); } catch (InterruptedException | ExecutionException e) { //判断是否特定异常发生了 if(e.getCause() instanceof IllegalStateException) { System.out.println("Random().nextInt(100) % 2 == 0"); } else { e.printStackTrace(); } } threadPool.shutdown(); } } class MyTask implements Callable { private String name; public MyTask(String name) { this.name = name; } public Object call() throws Exception { // doing something here ... Thread.sleep(2000); if(new Random().nextInt(100)%2==0) { throw new IllegalStateException(); } // after task done,return result return name + " Done!"; } }
package thread.pool; import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; /** * Pass task results to other processor as soon as possible or do something else * while tasks are executing 2. 尽快将已经完成任务的结果传递给另外的线程处理 */ public class Concurrent_CallableCompletion { public static void main(String[] args) { //创建线程池 ExecutorService threadPool = Executors.newFixedThreadPool(3); //创建ExecutorCompletionService ExecutorCompletionService<Object> completionService = new ExecutorCompletionService<Object>(threadPool); //提交若干任务到ExecutorCompletionService中 for(int i=1;i<10;i++) completionService.submit(new OtherTask("task"+i)); for(int i=1;i<10;i++) { try { //获取下一个完成的任务,如果没有,则阻塞 Future<Object> future = completionService.take(); Object result = future.get(); //here: pass result to another processor System.out.println("Result is :" + result); } catch (InterruptedException | ExecutionException e) { //判断异常来源,进行特殊处理 if(e.getCause() instanceof IllegalStateException) { System.out.println("Something bad happen! Random().nextInt(100) % 2 == 0"); } else { e.printStackTrace(); } } } threadPool.shutdown(); } } class OtherTask implements Callable { private String name; public OtherTask(String name) { this.name = name; } public Object call() throws Exception { // doing something here ... Thread.sleep(2000); if(new Random().nextInt(100)%2==0) { throw new IllegalStateException(); } // after task done,return result return name + " Done!"; } }
相关推荐
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
java.util.concurrent.Callable API介绍和简单案例
标签:atlassian-util-concurrent-0.0.12.jar.zip,atlassian,util,concurrent,0.0.12,jar.zip包下载,依赖包
java.util.concurrent-多线程框架
backport-util-concurrent-3.1.jar 和 geronimo-stax-api_1.0_spec-1.0.1.jar 复制到 MyEclipse 6.5\eclipse\plugins\Axis2_Codegen_Wizard_1.3.0\lib 文件夹下。 (3).注册此 jar 包: 修改MyEclipse 6.5\eclipse...
backport-util-concurrent.jarbackport-util-concurrent.jarbackport-util-concurrent.jar
- copy %AXIS2_HOME%\lib\backport-util-concurrent-3.1.jar 到%ECLIPSE_HOME%\plugins\Axis2_Codegen_Wizard_1.3.0\lib - 注册此 jar 包: 編輯 %ECLIPSE_HOME%\plugins\Axis2_Codegen_Wizard_1.3.0\plugin.xml , ...
正在处理依赖关系 apr-util,它被软件包 greenplum-db-6.0.0_beta.7-1.el7.x86_64 需要 --> 正在处理依赖关系 apr,它被软件包 greenplum-db-6.0.0_beta.7-1.el7.x86_64 需要 --> 正在检查事务 ---> ...
Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError),内附解决方案!
java并发工具包 java.util.concurrent中文版-带书签版
java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
java.util.concurrent系列文章(1) java.util.concurrent系列文章(1) java.util.concurrent系列文章(1) java.util.concurrent系列文章(1)
在Eclipse3.5用Axis2中创建wsdl文件时,在最后一步出现如下错误: An error ocCurred while ...解决用到的jar包,两个jar包在backport-util-concurrent-3.1.jar和geronimo-stax-api_1.0_spec-1.0.1.jar.zip的压缩文件中
jar包,官方版本,自测可用
java.util.concurrent总体概览图。 收取资源分3分。需要的同学可以下载一下。 java.util.concurrent主要包括5个部分executor,colletions,locks,atomic,tools。 该图详细的列举了并发包下面的结构,包含所有接口和...
如果不能免费下载,关注我,评论区联系我索要!
apr-util-1.3.9-1.el5.i386.rpm apr-util-devel-1.3.9-1.el5.i386.rpm apr-util-ldap-1.3.9-1.el5.i386.rpm libxslt-python-1.1.17-2.el5_2.2.i386.rpm system-config-httpd-1.3.3.3-1.el5.noarch.rpm
java并发工具包 java.util.concurrent中文版pdf