用线程池异步执行方法并去返回值
时间: 2024-12-12 12:20:25 浏览: 8
在Java中,我们可以使用`ExecutorService`和`Future`接口来创建线程池并异步执行方法,同时处理返回值。以下是基本步骤:
1. **创建ExecutorService**:首先,你需要创建一个`ThreadPoolExecutor`或者通过`Executors`工厂方法获取预配置好的线程池。
```java
ExecutorService executor = Executors.newFixedThreadPool(5); // 创建固定大小的线程池
```
2. **提交任务**:然后,你可以将需要执行的任务包装成`Runnable`或`Callable`对象,并调用`submit()`方法将其提交到线程池。
对于简单返回值的任务(非阻塞),使用`Runnable`和`Future<T>`:
```java
Future<Integer> future = executor.submit(new TaskThatReturnsInt());
```
或者使用`Callable<T>`,它允许有返回值和异常处理:
```java
Future<SomeClass> future = executor.submit(() -> someMethodThatReturnsObject());
```
3. **获取结果**:如果你想要得到任务的结果,可以调用`get()`方法等待其完成。这可能会阻塞,直到任务完成。如果不想阻塞,可以使用`isDone()`检查任务是否已完成,然后选择适当的时机获取结果。
```java
int result = future.get(); // 等待结果
```
4. **关闭线程池**:当所有任务完成后,记得关闭线程池以释放系统资源。
```java
executor.shutdown();
```
阅读全文