java停止线程的方法

java停止正在运行的线程的办法,自从stop方法过时之后,就剩下一个interrupt。但是这个interrupt是“尝试”打断线程,如果线程正在运行,它只是给线程置一个状态,线程周期性的判断状态退出;如果线程正在sleep、wait等,线程会被打断,并抛出一个异常。

也就是说终止正在运行的线程是有可能的,但一个问题是如果调用到这个interrupt,这个interrupt一般是外界的一个动作(比如点击一个停止按钮)触发的。

可以有两个办法:一是线程启动前用变量保持线程的引用,进而可以调用线程的终端方法。二是可以使用线程池,要有一个管理类持有和管理线程池,调用线程池的关闭方法shutdownNow,进而间接调用线程的中断方法。但是线程池一般是需要长期存活使用的,不能因为一次终止线程导致线程池不可用,所以每次使用线程池记得检查状态,如果关闭了就需要重新初始化线程池,初始化时还需要注意线程安全问题。

以上两个是直接停止线程的办法,还有一个类似的办法,就是使用信号量,当需要停止线程时给一个volatile静态变量置值,线程周期性的检查此值退出。不过还是建议使用interrupt方法,个人认为自己的实现效率可能没有jdk类库的效率高,尚未验证。

你可能感兴趣的:(Java)