java - 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
所以我的问题是:
- 这是一个正确的解决方案吗?
- 这不是一个很常见的场景,如果是这样,java中有什么东西
java.util.concurrent
可以实现吗?我想使用类似java.util.concurrent.Future
能够从 中获取返回值的task()
东西,而我不能使用上面的解决方案。
解决方案
推荐阅读
- python - KV 语言矩形 self.size 不起作用
- javascript - 如何解决运行反应项目的问题?
- python - Ubuntu:selenium.common.exceptions:未创建会话:此版本的 ChromeDriver 仅支持 Chrome 版本 79
- asynchronous - 如何在 Dart 中一次处理列表 2 中的项目
- python - 选择不包括某些特定单词的单词 - 正则表达式
- web-hosting - 将外部邮件程序与 IMSCP/I-MSCP 邮件服务器一起使用
- mysql - 如何总结表中每个唯一的最后一个值
- javascript - 脚本中没有定义Javascript函数?
- html - 在 Bootstrap 网格中对齐大小不等的图像
- python - Tkinter 滚动框架:扩展框架以适应一个方向的内容画布