// Java异步线程示例代码
import java.util.concurrent.*;
public class AsyncThreadExample {
public static void main(String[] args) throws InterruptedException, ExecutionException {
// 创建一个线程池,这里使用的是固定大小为2的线程池
ExecutorService executor = Executors.newFixedThreadPool(2);
// 创建一个Callable任务,这个任务会在另一个线程中执行,并返回结果
Callable<Integer> task = () -> {
// 模拟耗时操作
Thread.sleep(2000);
return 123; // 返回计算结果
};
// 提交任务给线程池执行,并获取Future对象用于获取任务执行结果
Future<Integer> future = executor.submit(task);
System.out.println("主线程继续执行其他任务...");
// 主线程可以继续做其他事情
Thread.sleep(1000);
// 获取异步任务的结果,如果任务还没有完成,则会阻塞等待直到任务完成
Integer result = future.get();
System.out.println("异步任务的结果是: " + result);
// 关闭线程池
executor.shutdown();
}
}
ExecutorService:这是Java提供的线程池管理工具,可以方便地管理和调度线程。Executors.newFixedThreadPool(2)
创建了一个包含两个线程的线程池。
Callable:与 Runnable
类似,但 Callable
可以返回结果并且可以抛出异常。在这个例子中,我们定义了一个 Callable<Integer>
任务,它会模拟一个耗时操作(如网络请求或文件读取),并最终返回一个整数结果。
Future:当我们提交一个 Callable
任务给线程池时,submit()
方法会返回一个 Future
对象。通过 Future
,我们可以在稍后获取任务的执行结果,或者检查任务是否已经完成。
future.get():这个方法会阻塞当前线程,直到异步任务完成并返回结果。如果任务尚未完成,调用 get()
会一直等待,直到任务完成。
executor.shutdown():当所有任务完成后,我们应该关闭线程池,以确保程序能够正常退出。
上一篇:javascrpt
下一篇:java使用websocket
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站