在Java/Clojure中杀死无限循环

5 java multithreading clojure slime swank

回应一些"潜在的答案"

  • 你应该在你的线程中加入"中断"

    我不编写我的代码,意图是一个漫长的进程/无限循环; 只是在开发过程中,我意外地编写了恰好是无限循环的代码,因此我无法事先计划将"检查线程是否被中断"放入代码中.

题:

随着我越来越熟悉Java/Clojure/Swank和增量代码开发.我发现很容易意外地编写一个最终成为无限循环的clojure函数 - 然后运行它.然后继续,然后钉住JVM,导致我的笔记本电脑上的风扇旋转 - 基本上,我必须杀死整个JVM才能摆脱一个逃跑的线程.

现在,无论如何我能以某种方式安全地杀死这些clojure线程吗?我很清楚Thread.stop有各种不安全的后果(比如持有其他线程可能需要的锁等等) - 但是,这些是无限循环的clojure函数 - 而且我在外面执行它们任何STM - 所以我想知道是否有某种方法可以安全地杀死这些线程.

谢谢!

Art*_*ldt 7

我不认为存在完整的答案,尽管有一些不完整但仍然有用的事情要做:

  • 首先,我ctrl-c ctrl-c从repl中击中了前景线程,后者获得了99%的常见错误.
  • 然后,如果失败,我去终端和kill命令.
  • 之后M-x slime-quit-lisp,clojure-jack-in