完成线程CompletionService返回值操作(按完成操作的线程的先后打印)

来源:互联网 发布:韩国高分电影知乎 编辑:程序博客网 时间:2024/06/02 21:39
import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.CompletionService;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorCompletionService;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * 完成线程CompletionService返回值操作(按完成操作的线程的先后打印) * @author tanfei * @date 2012-02-03 */public class CompletionServiceTest {/** * @param args */public static void main(String[] args) {ExecutorService threadPool = Executors.newFixedThreadPool(3);//创建固定线程池CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(threadPool);for(int i = 1; i <= 10; i++){final int task = i; //任务编号completionService.submit(new Callable<Integer>(){//执行任务@Overridepublic Integer call() throws Exception {Thread.sleep(new Random().nextInt(5000));//随机产生小于5秒钟System.out.println("-------");return task;}});}System.out.println("等待结果中...");for(int i = 1; i <= 10; i++){try {System.out.println(completionService.take().get());//按照执行完成的先后顺序打印返回结果} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}threadPool.shutdown();//关闭线程池}}