多线程处理时有时需要用到带有返回值的业务场景。
java原生Callable类已支持
package com;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class Demo {
public static void main(String[] args) {
// 创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(10);
// 创建多个有返回值的任务
List<Future> dealList = new ArrayList<Future>();
for (int i=0;i<10;i++) {
Callable c = new MyCallable(i);
// 执行任务并获取Future对象
Future f = pool.submit(c);
dealList.add(f);
}
// 关闭线程池
pool.shutdown();
for (Future f : dealList) {
try {
System.out.println(f.get());//获取执行结果
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
编写自己的业务逻辑处理类
package com;
import java.util.concurrent.Callable;
public class MyCallable implements Callable{
public String str = "";
public MyCallable(int i) {
str = "线程" +i + "";
}
@Override
public String call() throws Exception {
// TODO Auto-generated method stub
//你的业务处理逻辑
return str;
}
}