我一直在研究" java线程停止"问题一阵子。我在stackoverflow上阅读了很多文章,他们中的大多数都得出结论,在java中线程停止非常尴尬。一些好的方法包括:
join
(this answer得到87个upvotes)并等待线程结束。 volatile
标志以表示其他线程。 This answer获得了113个赞成票。Thread.interrupt()
,然后检查isInterrupted
shutdownNow
方法没有给出任何保证,并依赖于isInterrupted
boolean 但是上述两种方法都不允许立即停止线程。例如,如果一个程序正在运行一些SQL
并等待外部数据库响应,那么以上所有方法都会等待"谦虚等待"直到SQL
完成。所以停止不是立竿见影的。只有当SQL
完成(可能需要数小时)时,程序才会检查isInterrupted
或其他标志,然后停止
这是一个妙语。 。
我知道Eclipse是根据this stackoverflow的答案用java
编写的。每当我点击红色停止按钮时,Eclipse将立即停止我的应用程序。我认为它不使用Thread.stop
,因为它已被弃用。但我无法使用stackoverflow上推荐的那些方法。 Eclipse如何设法如此快速地停止线程?
答案 0 :(得分:7)
当您从Eclipse中运行Java程序时,将在新进程中创建一个全新的JVM来运行该程序。进程与线程不是一回事。
在Eclipse中,该过程由java.lang.Process
类表示。当你停止程序时,Eclipse会调用destroy()
Process
方法。
所以Eclipse正在使用它与线程无关。