并发包CallableAndFuture
Posted 安静
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发包CallableAndFuture相关的知识,希望对你有一定的参考价值。
/**
*
* @描述: Callable Future
*
* 程序运行一个线程,线程运行结束后,我们可以获取另一个线程的结果
*
* @作者: Wnj .
* @创建时间: 2017年5月16日 .
* @版本: 1.0 .
*/
public class CallableAndFuture {
/**
* 单个任务
* <功能详细描述>
*/
public static void single() {
ExecutorService threadPool = Executors.newSingleThreadExecutor();
/**
* 需要返回结果的就使用submit
*/
Future<String> future = threadPool.submit(new Callable<String>() {
public String call() throws Exception {
Thread.sleep(2000);
return "hello";
};
});
System.out.println("等待拿到结果");
try {
System.out.println("拿到结果" + future.get());
// System.out.println("拿到结果" + future.get(1,TimeUnit.SECONDS));//1秒钟内必须返回
}
catch (InterruptedException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* 多个任务
* <功能详细描述>
*/
public static void array() {
ExecutorService threadPool2 = Executors.newFixedThreadPool(10);
/**
* 一定就提交一组Callable任务,只要一个任务完成了就能获取到结果
*/
CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(threadPool2);
for (int i = 1; i <= 10; i++) {
final int seq = i;
completionService.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
Thread.sleep(new Random().nextInt(5000));
return seq;
}
});
}
for (int i = 0; i < 10; i++) {
try {
System.out.println(completionService.take().get());
}
catch (InterruptedException e) {
e.printStackTrace();
}
catch (ExecutionException e) {
e.printStackTrace();
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
array();
}
以上是关于并发包CallableAndFuture的主要内容,如果未能解决你的问题,请参考以下文章