基于callable创建有返回值的多线程
有的时候,我们可能需要在主线程中创建多个线程 并发执行一个任务,然后收集各个线程的执行结果,那么我们就需要使用callable接口了,
具体的我们看下面的代码
AThread :
public class AThread implements Callable<String> {
private String name;
public AThread(String name) {
this.name = name;
}
@Override
public String call() throws Exception {
return name;
}
}
Test
public class Test {
public static void main(String[] args) {
//创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(10);
//list集合
List<Future> list = new ArrayList<>();
for (int i = 0; i <10 ; i++) {
//返回值的线程实例
AThread a = new AThread(i + "");
//提交线程
Future submit = pool.submit(a);
System.out.println("submit------------>"+"第"+ i +"次执行");
list.add(submit);
}
//关闭线程,等待线程结束
pool.shutdown();
//遍历线程的运行结果
for (Future f : list
) {
//从遍历结果中获取返回值
try {
System.out.println("f----------------->"+"第"+f.get().toString()+"次执行");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
}
输出:
submit------------>第0次执行
submit------------>第1次执行
submit------------>第2次执行
submit------------>第3次执行
submit------------>第4次执行
submit------------>第5次执行
submit------------>第6次执行
submit------------>第7次执行
submit------------>第8次执行
submit------------>第9次执行
f----------------->第0次执行
f----------------->第1次执行
f----------------->第2次执行
f----------------->第3次执行
f----------------->第4次执行
f----------------->第5次执行
f----------------->第6次执行
f----------------->第7次执行
f----------------->第8次执行
f----------------->第9次执行
喜欢的小伙伴可以关注我微信公众号哈,每天都有干货分享