还能继续优化这段代码吗
时间: 2023-12-26 14:24:05 浏览: 86
当然可以,以下是进一步优化过的代码:
```java
public class MultiThreadDemo {
public static void main(String[] args) throws InterruptedException, ExecutionException {
int n = 10; // 任务数量
String[] tasks = new String[n]; // 任务列表
for (int i = 0; i < n; i++) {
tasks[i] = "Task " + i;
}
// 创建线程池
ExecutorService executorService = Executors.newFixedThreadPool(5);
// 提交任务
List<CompletableFuture<String>> futures = new ArrayList<>();
for (int i = 0; i < n; i++) {
futures.add(CompletableFuture.supplyAsync(() -> processTask(tasks[i]), executorService));
}
// 等待任务完成
CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]))
.join();
// 处理任务结果
for (CompletableFuture<String> future : futures) {
String result = future.get();
System.out.println("Task result: " + result);
}
// 关闭线程池
executorService.shutdown();
}
/**
* 处理任务
*/
private static String processTask(String task) {
// 执行任务
System.out.println("Processing task: " + task);
// 模拟任务处理
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return task + " processed";
}
}
```
在上面的代码中,我们进一步优化了多线程处理的过程,具体优化如下:
1. 使用 `CompletableFuture` 代替 `Future` 接口:`CompletableFuture` 是 JDK 8 中新增的一个类,它可以更方便地处理多线程任务,同时可以实现链式调用和异常处理等功能。
2. 使用 `CompletableFuture.supplyAsync` 方法提交任务:使用 `CompletableFuture.supplyAsync` 方法可以更方便地提交任务,并在任务完成后返回结果。
3. 使用 `CompletableFuture.allOf` 方法等待所有任务完成:使用 `CompletableFuture.allOf` 方法可以等待所有任务完成,这样可以更好地控制任务的执行顺序和结果。
4. 在任务处理器中处理任务:将任务处理的逻辑封装在一个方法中,可以更好地实现代码的复用和封装,同时可以更好地控制任务处理的过程。
总之,通过使用 `CompletableFuture` 类和封装任务处理的方法,可以更方便地处理多线程任务,并实现链式调用和异常处理等功能,从而进一步提高代码的可读性和可维护性。
阅读全文