Java线程:计时器,中断

时间:2019-03-07 16:03:01

标签: java multithreading

让我们假设有一个方法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

所以我的问题是:

  1. 这是正确的解决方案吗?
  2. 这不是很常见的情况吗?如果是这样,那么Java java.util.concurrent中是否可以实现它?我想使用类似java.util.concurrent.Future的方法来从task()获取返回值,而上述解决方案是我无法做到的。

0 个答案:

没有答案