Callable与Future的应用

来源:互联网 发布:centos安装vnc 编辑:程序博客网 时间:2024/06/06 12:05
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;import java.util.concurrent.Future; public class CallableAndFuture {    public static void main(String[] args) {      ExecutorService threadPool = Executors.newSingleThreadExecutor();      Future<String> future = threadPool.submit( //submit 会调用Callable方法 会有返回结果            new Callable<String>() {                @Override                public String call() throws Exception {                   // TODO Auto-generated method stub                   Thread.sleep(2000);                   return "hello";                }            }         );           System.out.println("等待结果");      try {         System.out.println("拿到结果:"+ future.get());      } catch (InterruptedException e) {         // TODO Auto-generated catch block         e.printStackTrace();      } catch (ExecutionException e) {         // TODO Auto-generated catch block         e.printStackTrace();      }                ExecutorService threadPool2 = Executors.newFixedThreadPool(10);      // CompletionService 用于提交一组Callable任务      CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(threadPool2);      for(int i = 0; i< 10 ; i++){         final int squence = i;         completionService.submit(new Callable<Integer>() {            @Override            public Integer call() throws Exception {                // TODO Auto-generated method stub                Thread.sleep(new Random().nextInt(5000));                return squence;            }         });      }           for(int i=0; i<10; i++){         try {            System.out.println(completionService.take().get()); // 先取得先运行完的线程返回的结果         } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();         } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();         }      }   }    } 

原创粉丝点击