call future实现多线程

来源:互联网 发布:ps软件字体下载 编辑:程序博客网 时间:2024/05/29 13:56
packageadvancedJava;
 
importjava.util.Random;
importjava.util.concurrent.*;
 
/**
 * callable和future是试验类
 *
 * @author: cuiH
 * Date: 13-11-27
 * 执行一个线程,取得线程返回的结果
 * callable 返回一个结果,future取到返回的结果。
 */
publicclass CallableAndFuture {
    publicstatic void main(String[] args) throwsExecutionException, InterruptedException, TimeoutException {
        ExecutorService threadPool = Executors.newSingleThreadExecutor();
        Future<String> future = threadPool.submit(newCallable<String>() {
            @Override
            publicString call() throwsException {
                Thread.sleep(200);
                return"Hello Honey";
            }
        });//提交返回的结果
        System.out.println("等待结果");
        System.out.println("拿到结果:"+ future.get(1, TimeUnit.SECONDS));
        //future可以添加参数
 
        ExecutorService threadPool2 = Executors.newFixedThreadPool(10);
 
 
        //提交一批量的结果,然后,立刻获得先获得的结果,同时捕获。应用需要查找
        CompletionService<Integer> completionService = newExecutorCompletionService<Integer>(threadPool2);
        for(inti = 0; i < 10; i++) {
            finalint finalI = i;
            completionService.submit(newCallable<Integer>() {
                @Override
                publicInteger call() throwsException {
                    Thread.sleep(newRandom().nextInt(5000));
                    returnfinalI;
                }
            });
        }
        for(inti = 0; i < 10; i++) {
            System.out.println(completionService.take().get());
        }
    }
}
原创粉丝点击