首页 > 解决方案 > Java 线程:定时器、中断

问题描述

假设我有一个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()东西,而我不能使用上面的解决方案。

标签: javamultithreading

解决方案


推荐阅读