JDK1.7版本简单执行异步方法,异步方法的参数由主线程提供
时间: 2024-12-23 22:18:54 浏览: 13
在 Java 1.7 及之后的版本中,如果想要主线程简单地异步执行一个方法,并传递参数,可以利用 `Callable` 结构配合 `FutureTask`。`FutureTask` 是 `Future` 接口的一个实现,它可以包装一个 `Runnable` 或 `Callable` 任务,并提供了获取任务结果的能力。
下面是一个简单的例子:
```java
// 主线程
ExecutorService executor = Executors.newSingleThreadExecutor();
// 定义一个 Callable 封装主线程提供的参数
Callable<String> callable = new Callable<String>() {
@Override
public String call() throws Exception {
// 这里是你异步执行的方法,参数在 call 方法内部获取
String argument = ...; // 从主线程传入的参数
// 执行耗时操作
Thread.sleep(2000); // 模拟耗时操作
return "异步操作返回值:" + argument;
}
};
// 使用 FutureTask 包装 Callable 并提交任务
FutureTask<String> futureTask = new FutureTask<>(callable);
executor.execute(futureTask);
// 主线程继续执行,无需等待任务完成
// ...
// 当需要时,主线程可以从 Future 获取结果
String result = futureTask.get(); // 这会阻塞主线程,直到异步任务完成
System.out.println("异步方法执行结果:" + result);
executor.shutdown(); // 关闭线程池
```
在这个例子中,主线程创建了一个单线程 `ExecutorService`,然后提交了一个包含主线程参数的 `Callable` 到服务中。当主线程结束时,异步操作还在进行,不会影响主线程的执行。
阅读全文