让我们假设有一个方法task()
要在单独的线程中执行。运行此方法的线程可以正确停止(即,它正确处理InterruptedException
并定期检查isInterrupted
标志)。
我想在超时的情况下运行此方法。更准确地说,一旦超时结束,我只想告诉该单独的线程该结束了(通过设置isInterrupted
标志),然后等待该线程检查并安全终止。
我不想使用Thread.stop()
大致停止它,因为它是不安全的,并且我不想在task()
线程终止之前在主线程中继续执行代码。
我想到的是这样的:
Thread thread = new Thread(() -> task());
thread.start();
thread.join(timeout);
thread.interrupt();
thread.join();
// proceed main thread execution
所以我的问题是:
java.util.concurrent
中是否可以实现它?我想使用类似java.util.concurrent.Future
的方法来从task()
获取返回值,而上述解决方案是我无法做到的。