1、先创建一个线程池
// 创建一个固定大小的线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
2、创建一个异步现成执行你所需要执行的业务
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
System.out.println(Thread.currentThread().getName() + ":开始执行");
try {
Thread.sleep(3000); // 模拟耗时操作
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 重新设置中断状态
throw new RuntimeException(e);
}
System.out.println(Thread.currentThread().getName() + ":执行完成");
return "Hello, World!"; // 正确地返回结果
},executor);
3、异步处理异步业务的返回结果
future.thenAccept(result -> {
System.out.println(Thread.currentThread().getName() + ":开始执行结果处理");
System.out.println("获取到的结果是: " + result);
System.out.println(Thread.currentThread().getName() + ":执行完成结果处理");
});
4、业务结束
整体代码
public static void main(String[] args) {
// 创建一个固定大小的线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
System.out.println(Thread.currentThread().getName() + ":开始执行");
try {
Thread.sleep(3000); // 模拟耗时操作
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 重新设置中断状态
throw new RuntimeException(e);
}
System.out.println(Thread.currentThread().getName() + ":执行完成");
return "Hello, World!"; // 正确地返回结果
},executor);
System.out.println("主线程执行完成");
future.thenAccept(result -> {
System.out.println(Thread.currentThread().getName() + ":开始执行结果处理");
System.out.println("获取到的结果是: " + result);
System.out.println(Thread.currentThread().getName() + ":执行完成结果处理");
});
System.out.println("主线程结束");
try {
Thread.sleep(3000); // 模拟耗时操作
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 重新设置中断状态
throw new RuntimeException(e);
}
// 记得在程序结束时关闭线程池
executor.shutdown();
}
代码执行结果
主线程执行完成
pool-2-thread-1:开始执行
主线程结束
pool-2-thread-1:执行完成
pool-2-thread-1:开始执行结果处理
获取到的结果是: Hello, World!
pool-2-thread-1:执行完成结果处理