Java并发编程之线程管理(Executor框架14)
来源:互联网 发布:java webservice开发 编辑:程序博客网 时间:2024/06/05 19:35
4.4运行并发任务并返回所有运行结果
ThreadPoolExecutor提供了一个方法,它允许你发送给executor一列的任务链表,并且等待这些任务的终结。请看下面实例。
Result类的定义如下所示:
/** * This class stores the resultgenerated by one task * */public class Result { /** * The name of the task that generates theresult */ private String name; /** * The value of the task that generates theresult */ private intvalue; /** * Returns the name of the task * @return Name of the task that generates the result */ public String getName() { return name; } /** * Establish the name of the task * @param name The name of the task that generates the result */ public voidsetName(String name) { this.name = name; } /** * Returns the value of the result * @return The value of the result */ public intgetValue() { return value; } /** * Establish the value of the result * @param value The value of the result */ public voidsetValue(intvalue) { this.value = value; } }
定义Task类,实现必要的逻辑。
import java.util.ArrayList;import java.util.List;import java.util.concurrent.Callable;importjava.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.TimeUnit; /** * This class implements the task ofthis example. It waits during a random * period of time and then calculatethe sum of five random numbers * */public class Task implements Callable<Result> { /** * The name of the Task */ private String name; /** * Constructor of the class * @param name Initializes the name of the task */ public Task(String name) { this.name=name; } /** * Main method of the task. Waits during arandom period of time and then * calculates the sum of five random numbers */ @Override public Result call() throws Exception { // Writes a message to the console System.out.printf("%s: Staring\n",this.name); // Waits during a random period of time try { Long duration=(long)(Math.random()*10); System.out.printf("%s: Waiting %d seconds for results.\n",this.name,duration); TimeUnit.SECONDS.sleep(duration); } catch (InterruptedException e) { e.printStackTrace(); } // Calculates the sum of five random numbers int value=0; for (int i=0; i<5; i++){ value+=(int)(Math.random()*100); } // Creates the object with the results Result result=new Result(); result.setName(this.name); result.setValue(value); System.out.printf("%s: Ends\n",this.name); // Returns the result object return result; } public staticvoidmain(String []args){ // Create an executor ExecutorServiceexecutor=(ExecutorService)Executors.newCachedThreadPool(); // Create three tasks and stores them in a List List<Task> taskList=newArrayList<Task>(); for (int i=0; i<3; i++){ Task task=new Task("Task-"+i); taskList.add(task); } // Call the invokeAll() method List<Future<Result>>resultList=null; try { resultList=executor.invokeAll(taskList); } catch (InterruptedException e) { e.printStackTrace(); } // Finish the executor executor.shutdown(); // Writes the results to the console System.out.printf("Core: Printing the results\n"); for (int i=0; i<resultList.size(); i++){ Future<Result>future=resultList.get(i); try { Result result=future.get(); System.out.printf("%s: %s\n",result.getName(),result.getValue()); } catch (Exception e) { e.printStackTrace(); } } } }
运行结果:
Task-0:StaringTask-2:StaringTask-1:StaringTask-2:Waiting 3 seconds for results.Task-0:Waiting 0 seconds for results.Task-1:Waiting 4 seconds for results.Task-0:EndsTask-2:EndsTask-1:EndsCore:Printing the resultsTask-0:175Task-1:206Task-2: 101
0 0
- Java并发编程之线程管理(Executor框架14)
- Java并发编程之线程管理(Executor框架11)
- Java并发编程之线程管理(Executor框架12)
- Java并发编程之线程管理(Executor框架13)
- Java并发编程之线程管理(Executor框架15)
- Java并发编程之线程管理(Executor框架16)
- Java并发编程-Executor框架之ScheduledThreadPoolExecutor
- Java并发编程-Executor框架之CompletionService
- 【Java并发编程】之十九:并发新特性—Executor框架与线程池(含代码)
- 【Java并发编程】之十九:并发新特性—Executor框架与线程池(含代码)
- 【Java并发编程】之十九:并发新特性—Executor框架与线程池(含代码)
- 【Java并发编程】之十九:并发新特性—Executor框架与线程池(含代码)(r)
- 【Java并发编程】之十九:并发新特性—Executor框架与线程池(含代码)
- Java并发编程之十九:并发新特性—Executor框架与线程池(含代码)
- 【Java并发编程】之十九:并发新特性—Executor框架与线程池
- JAVA随笔之线程编程(Executor框架)
- java并发编程-Executor框架
- java并发编程-Executor框架
- List内部元素全排列--以String为例
- 计算机网络概述
- 数组的游标实现
- 如何用Linux命令行管理网络:11个你必须知道的命令
- VS编译器如何单步调试
- Java并发编程之线程管理(Executor框架14)
- Python基础知识2——join 和 split 的使用方法
- CSS学习之路——布局关键先生:BFC
- Fragment简介
- Unity学习小结3 - Unity,你给我的坑
- Linux一些常用命令总结
- C#-控制台-Char类的使用大全---ShinePans
- java中的链表
- 变量存储类型