java : stop safety a thread; not using while and boolean flag

标签 java multithreading thread-safety

我有一个线程只执行一次其任务。如果它不能在适当的时间做到这一点,我想阻止它。我怎样才能做到这一点?我之前见过的所有方法都使用了 while 循环和用于多次完成任务的标志;但我的任务不是那样的。

谢谢大家。

最佳答案

停止任务的唯一干净方法是中断它(或设置一些其他标志),这会导致线程正常停止。如果您的代码中没有外循环,您可以在可以安全中断工作流程的各个关键点进行检查。对于大型代码库来说,这可能很乏味,但这是最好的方法。

如果您有一个无法控制的库,则可以使用 Thread.stop(),但这可能会使您的应用程序处于未定义状态。它不会杀死线程本身,但会触发 ThreadDeath 错误,该错误将展开堆栈并调用finally block 等。问题是它将发生在有效随机的代码行中(甚至在代码行的中途) 线程可以忽略 ThreadDeath 错误,具体取决于代码的编写方式。

解决这个问题的唯一方法是在另一个进程中运行不受信任的代码,然后在该进程花费太长时间时终止该进程。这可能会留下临时文件,但这是一个更安全的选择。

关于java : stop safety a thread; not using while and boolean flag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7291914/

相关文章:

java - 将 ConcurrentHashMap 传递给另一个类的最佳方法?

java - Java 中增强的 for 循环和迭代器

java - 在 JTable 列中设置 JXDatePicker 的最小日期

java - Java 在特定时间间隔内可以执行多少次循环?用于确定遗传算法效率

C# 在多个线程上拆分循环

java - 如何检查 FX 应用程序线程策略违规

java - 扫描仪在程序结束时拾取用户输入的问题

java - 访问不同线程上的列表的输出是什么?

c++ - 将 std::future 类成员声明为可变的是否是线程安全的?

java - Lambda 表达式中的 "Starting new Thread in constructor"警告 (NetBeans IDE)