java - 在另一个线程中等待 Future 结果

标签 java concurrency

在下面的一段代码中,要求是向某个 UI 线程发布一条关于 Callable 运行结果的消息。

Future<T> aFuture = aExecutorService.submit(aCallable); //suppose in thread A

aExecutorService.execute(new Runnable() { //suppose in thread B
                @Override
                public void run() {
                    try {
                        final T aresult = aFuture.get();
                        sendSuccessMesage(aResult);
                    }catch( . . . . . . e)
                      . . . . . . . 
                      sendExceptionHappenedMessage(e.getMessage());
                      . . . . . . .
                    }
                }

如果线程 A 被中断,线程 B 会一直等待结果吗? 执行此操作的替代/安全方法是什么?

最佳答案

如果任务 aCallable 被取消,则 get() 可能永远不会返回。最安全、最有效的方法是使用一个任务。

Future future = aExecutorService.submit(new Runnable() {
    @Override
    public void run() {
        try {
            final T aresult = aCallable.call();
            sendSuccessMesage(aResult);
        } catch(Throwable e)
            sendExceptionHappenedMessage(e.getMessage());
        }
    }
});

// to cancel.
future.cancel(true);

取消它的另一种方法是在设置为 true 时使用 AtomicBoolean 并检查是否取消。这样,如果需要,仍然可以发送 sendCancelledMessage

关于java - 在另一个线程中等待 Future 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12687087/

相关文章:

Java认证样本

java - Appengine 之上的键值对

java - okhttp大文件上传失败

c - 如何为 TMS320F2812 DSP 编写内存屏障?

java - 不正确构造的对象是否只影响它在构造函数内发布的线程的可见性?

java - 等待/通知的奇怪 Java 行为

scala - 如何处理 Actor 的爆发?

java - 运行不会停止

java - 简而言之,Mockito 是如何实现其流畅的 stub 语法的?

java - 使用线程(启动和停止它们)