线程的停止
2021-03-30 本文已影响0人
atdoking
在Java中有以下3中方法可以终止正在运行的线程:
- 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止
- 使用stop方法强行终止线程,但是不推荐使用这个方法,因为stop和suspend级resume一样,都是作废过期的方法,使用它们可能产生不可预料的结果
- 使用interrupt方法中断线程
大多数停止一个线程的操作使用Thread.interrupt()方法,尽管方法的名字是停止,中止的意思,但这个方法不会终止一个正在运行的线程,还需加入一个判断才可以完成线程的停止
判断线程的煮给你太是不是停止的,在Java的SDK中,Thread.java类里提供了两种方法
- this.interrupted():测试当前线程是否已经中断
- this.isInterrupted(): 测试线程是否已经中断
this.interrupted(),测试当前线程是否已经中断,当前线程是指运行this.interrupted()的方法的线程
方法interrupted()的确判断出当前线程是否是停止状态,但如果连续调两次,第一次判断已经是true,其实第二次调用时会是false
测试当前线程是否已经中断。线程的中断状态由该方法清除。换句话说,如果连续两次调用该方法,则第二次调用将返回false(在第一次调用已清除了其中断状态之后,且第二次调用检验完中断状态前,当前线程再次中断的情况除外)
最后我们再次总结一下:
- this.interrupted():测试当前线程是否已经是中断状态,执行后具有将状态标志置清除为false的功能
- this.isInterrupted(): 测试线程Thread对象是否已经是中断状态,但不清除状态标志