public static void main(String[] args) {
ExecutorService exec = Executors.newFixedThreadPool(5);
List<Future> fuList = new ArrayList<Future>();
for (int i = 0; i < 10; i++) {
int a = i;
Future<String> f = null;
f = exec.submit(new Callable<String>() {
@Override
public String call() throws Exception {
System.out.println("线程:【" + a +"】开始执行");
Thread.sleep(1000*a);
return a + "返回值";
}
});
if (f != null) {
// f对象会直接放到fuList中,不用担心f为空
System.out.println("线程:【" + a +"】执行结束");
fuList.add(f);
}
}
try{
System.out.println("fuList:"+ fuList.size());
for (Future<String> f : fuList) {
if(f!=null){
// f.get获取每个线程的执行结果,单线程获取
System.out.println("线程执行结果:" + f.get());
}
}
System.out.println("isTerminated:" + exec.isTerminated());
}catch (Exception e){
}finally {
// 关闭线程池
exec.shutdown();
}
}
ExecutorService多线程同步,待所有线程执行结束后主线程继续运行
于 2023-06-20 14:32:24 首次发布