如何使用 Future<T> 接口?
How to use Future<T> interface?
我想知道未来的接口如何在 java 中工作以实现异步执行。
Future<Map> xyz = [:]
您需要使用 Executors framework
创建一个ExecutorService,存在多种类型
ExecutorService executor = Executors.newFixedThreadPool(1);
提交任务
Future<Integer> future = executor.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
for (int i = 0; i < 1e9; i++) {
}
return 123;
}
});
稍后,使用未来参考获得结果。一些可能的用途
future.isDone(); // check if ready
future.get(); // blocks until ready or InterruptedException
future.get(10, TimeUnit.SECONDS); // or wait a given time or TimeoutException
future.cancel(); // interrupt task
Adam 提到的 Executors 框架是获得 Future
的一种方式,但可以以完全不同的方式使用它们:
想象一个框架,您可以在其中连接到设备以通过线路发送命令并期待对每个命令的答复。
在这种情况下,您可以将知道其肯定和否定答案的命令对象放入 "pending" 队列,并在发送后 return 放入 Future
对象。
当 IO 线程收到适当的答案时,它可以将其放入 Future
对象中,让它及其用户知道有一个答案。
我想知道未来的接口如何在 java 中工作以实现异步执行。
Future<Map> xyz = [:]
您需要使用 Executors framework
创建一个ExecutorService,存在多种类型
ExecutorService executor = Executors.newFixedThreadPool(1);
提交任务
Future<Integer> future = executor.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
for (int i = 0; i < 1e9; i++) {
}
return 123;
}
});
稍后,使用未来参考获得结果。一些可能的用途
future.isDone(); // check if ready
future.get(); // blocks until ready or InterruptedException
future.get(10, TimeUnit.SECONDS); // or wait a given time or TimeoutException
future.cancel(); // interrupt task
Adam 提到的 Executors 框架是获得 Future
的一种方式,但可以以完全不同的方式使用它们:
想象一个框架,您可以在其中连接到设备以通过线路发送命令并期待对每个命令的答复。
在这种情况下,您可以将知道其肯定和否定答案的命令对象放入 "pending" 队列,并在发送后 return 放入 Future
对象。
当 IO 线程收到适当的答案时,它可以将其放入 Future
对象中,让它及其用户知道有一个答案。