java ExecutorService多线程
时间: 2023-12-22 12:27:56 浏览: 135
详解Java利用ExecutorService实现同步执行大量线程
Java中的ExecutorService是一个真正的线程池接口,它的常见子类是ThreadPoolExecutor。它提供了一种管理异步执行任务的方法,可以通过它来执行Runnable和Callable任务。其中,execute()方法用于执行任务/命令,没有返回值,一般用来执行Runnable;submit()方法用于执行任务,有返回值,一般用来执行Callable。另外,shutdown()方法用于关闭线程池。
下面是一个使用ExecutorService实现多线程的例子:
```java
ExecutorService executorService = Executors.newFixedThreadPool(10); // 创建一个固定大小为10的线程池
List<Future<String>> resultList = new ArrayList<>(); // 用于保存每个线程的执行结果
for (int i = 0; i < 100; i++) { // 向线程池提交100个任务
final int taskId = i;
Future<String> future = executorService.submit(new Callable<String>() {
@Override
public String call() throws Exception {
// 执行任务,这里模拟一个耗时的操作
Thread.sleep(1000);
return "Task " + taskId + " is completed.";
}
});
resultList.add(future); // 将每个任务的执行结果保存到resultList中
}
executorService.shutdown(); // 关闭线程池
// 批量获取线程执行结果,循环处理每条结果数据
for (Future<String> future : resultList) {
String result = null;
try {
result = future.get(); // 假如任务未完成,会阻塞获取结果
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(result);
}
```
上述代码中,我们创建了一个固定大小为10的线程池,向线程池提交了100个任务,并将每个任务的执行结果保存到resultList中。最后,我们通过循环遍历resultList来获取每个任务的执行结果。
阅读全文