zoukankan      html  css  js  c++  java
  • JAVA线程池中的Callable和Future

    import java.util.Random;
    import java.util.concurrent.Callable;
    import java.util.concurrent.CompletionService;
    import java.util.concurrent.ExecutorCompletionService;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    /**
     * Callable Future  completionService test
     * 
     * Future取得结果类型和Callable返回的结果
     * 
     * Callable需要ExecutorService使用submit方式提交
     * 
     * CompletionService 用于提交一组Callable,其中take方法返回已经完成的Callable任务
     * 
     * @author duwenlei
     *
     */
    public class CallableFutureTest {
    
        private static void testCallable() throws Exception {
            ExecutorService service = Executors.newSingleThreadExecutor();
            Future<String> future = service.submit(new Callable<String>() {
                @Override
                public String call() throws Exception {
                    Thread.sleep(5000);    //停止5秒返回
                    return "hello";
                }
            });
            System.out.println("等待结果");
            System.out.println("取得结果:"+future.get());
            //System.out.println("取得结果:"+future.get(1, TimeUnit.SECONDS));
            service.shutdown();
        }
        
        private static void testCompletionService() throws Exception{
            ExecutorService executor = Executors.newFixedThreadPool(3);
            CompletionService<Integer> service = new ExecutorCompletionService<Integer>(executor);    //需要一个线程池
            for (int i = 1; i <= 10; i++) {
                final int seq = i;
                service.submit(new Callable<Integer>() {
                    @Override
                    public Integer call() throws Exception {
                        Thread.sleep(new Random().nextInt(5000));    //休息时间,不确定
                        return seq;
                    }
                });
            }
            for (int i = 1; i <= 10; i++) {
                System.out.println(service.take().get());
            }
            executor.shutdown();
        }
        
        public static void main(String[] args) {
            try {
                testCallable();
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                testCompletionService();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }
  • 相关阅读:
    入门系列4
    入门系列3
    入门系列2
    入门系列1
    sql进阶-筛选库表中数据为空的表
    sql进阶-删除所有的视图
    sql序列(2) sql语句功能表
    sql序列(5)事务
    sql序列(4)存储过程
    KVM虚拟化介绍
  • 原文地址:https://www.cnblogs.com/duwenlei/p/5105628.html
Copyright © 2011-2022 走看看