您的位置:首页 > 编程语言 > Java开发

Java线程总结(十三):并发包------线程返回结果Callable和 Future

2016-09-14 00:27 921 查看
<pre name="code" class="java">package com.ydj;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class CallableAndFutureTest {

public static void main(String[] args) throws InterruptedException {
ExecutorService threadPool = Executors.newSingleThreadExecutor();
Future<String> future = threadPool.submit(// 注意是submit
new Callable<String>() {
public String call() throws Exception {
Thread.sleep(5000);// 休眠5s
return "hello";
};
});
System.out.println("等待结果...");
try {
// future.get()没有拿到结果就会一直等待
System.out.println("拿到结果:" + future.get());// 等到5s后拿到结果hello
System.out.println("拿到结果后才执行");
} catch (Exception e) {
e.printStackTrace();
}
}
}



package com.ydj;

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;

public class CallableAndFutureTest2 {
public static void main(String[] args) throws InterruptedException {
ExecutorService threadPool =  Executors.newFixedThreadPool(3);
//创建线程池,传递给completionService,用threadPool执行任务,执行的任务返回结果都是整数
CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(threadPool);
for(int i=1;i<=10;i++){
final int num = i;
completionService.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
Thread.sleep(new Random().nextInt(5000));
System.out.println(Thread.currentThread().getName()+"线程,准备返回:"+num);
return num;
}
});
}
System.out.println("-----------------");
for(int i=0;i<10;i++){
try {
//take获取第一个Future对象,用get获取结果
System.out.println("获取到:"+completionService.take().get());
} catch (ExecutionException e) {
e.printStackTrace();
}
}
System.out.println("***************");
}
}

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐