【发布时间】:2012-04-20 23:06:58
【问题描述】:
对一些“潜在答案”的回应
-
你应该在你的线程中加入“中断”
我编写代码的目的不是为了让它成为一个漫长的过程/无限循环;只是在开发过程中,我不小心编写了恰好是无限循环的代码,因此我永远无法事先计划将“检查线程是否被中断”放入代码中。
问题:
随着我越来越熟悉 Java/Clojure/Swank 和增量代码开发。我发现我很容易不小心编写了一个最终成为无限循环的 clojure 函数并运行它。然后继续进行,并锁定 JVM,导致我的笔记本电脑上的风扇旋转 - 基本上,我必须杀死整个 JVM 才能摆脱一个失控的线程。
现在,无论如何我可以以某种方式安全地杀死这些 clojure 线程吗?我很清楚 Thread.stop 具有各种不安全的后果(例如持有其他线程可能需要的锁等...)——但是,这里的这些 clojure 函数是无限循环的——并且我在任何 STM 之外执行它们——所以我想知道是否有某种方法可以安全地杀死这些线程。
谢谢!
【问题讨论】:
-
您必须首先定义什么是无限循环。
-
(println (range)) 是一个无限循环。
-
重点是检测无限循环类似于解决技术上不可能的停机问题。
-
您使用的是 Eclipse 还是什么? Eclipse 一般允许你终止被测程序而不挂起...?
-
问题是没有检测到无限循环。问题是:给定一个无限循环的线程,我如何安全地杀死它?
标签: java multithreading clojure slime swank