Callable有返回值的线程

来源:互联网 发布:公司网络屏蔽视频 斗鱼 编辑:程序博客网 时间:2024/05/01 06:15
package com.entel.research;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;public class CallableAndFuture{public static void main(String[] args){ExecutorService threadPool = Executors.newFixedThreadPool(5);CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(threadPool);for (int i = 1; i <= 5; i++){final int seq = i;completionService.submit(new Callable<Integer>(){public Integer call() throws Exception{Thread.sleep(new Random().nextInt(1000));return seq;}});}for (int i = 0; i < 5; i++){try{System.out.println(completionService.take().get());}catch (InterruptedException e){e.printStackTrace();}catch (ExecutionException e){e.printStackTrace();}}threadPool.shutdown();System.out.println("The End");}}