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();
            }
        }
    
    }
  • 相关阅读:
    15道谷歌面试题及答案
    Linux解压 tar命令
    C#中的WebBrowser控件的使用
    C#中正则表达式使用介绍
    C#中的DataGridView
    使用Python破解验证码
    Python Open Source Project List
    程序员接私活经验谈[转]
    C#中的Dictionary字典类介绍
    金老师的博客
  • 原文地址:https://www.cnblogs.com/duwenlei/p/5105628.html
Copyright © 2011-2022 走看看