现在的位置: 首页 > web前端 > 正文

暂停线程的方法

2020年07月20日 web前端 ⁄ 共 1196字 ⁄ 字号 评论关闭

  停止线程不像停止一个循环break一样干脆。停止一个线程意味着在线程处理完任务之前停掉正在做的操作,也就是放弃当前的操作。虽然看起来简单,但是必须做好正确的防范措施,以便达到预期的效果。停止一个线程可以用Thread.stop(),但最好不要用它。虽然它确实可以停止一个正在运行的线程,但是这个方法是不安全的,而且已经作废的方法。


  停止线程的方法


  大多数停止一个线程用Thread.interrupt()方法,尽管方法的名称是"中止,停止"的意思,但这个方法不一定会停止一个正在运行的线程,还需要加入一个判断才可以完成线程的停止。


  在Java中有3种方法可以停止正在运行的线程:


  (1)使用退出标志使线程正常终止,也就是当run方法完成后线程终止。


  (2)使用stop方法强行终止线程,但是不推荐使用这个方法,因为stop和suspend、resume一样,都是过期作废的方法。


  (3)使用interrupt方法中断线程。


  停止线程如何判断


  调用thread.interrupt()方法,但是此方法并不会马上停止线程,只是在当前线程打了一个停止的标记,并不是真正的停止线程。


  复制代码


  packagecn.qlq.thread.three;


  importorg.slf4j.Logger;


  importorg.slf4j.LoggerFactory;


  publicclassDemo1extendsThread{


  复制代码


  结果:(仍然会执行完线程的run方法,也就是interrupt()方法并没有中断线程)


  在Java的SDK种,提供了两个方法判断线程是否终止:


  (1)this.interrupted(),测试当前线程是否已经中止(静态方法------测试当前线程是否已经是中断状态,执行后具有将状态标志清除为false的功能)


  publicstaticbooleaninterrupted(){


  returncurrentThread().isInterrupted(true);


  }


  (2)this.isInterrupted(),测试线程是否已经中断。(实例方法-----测试线程对象Thread对象是否已经是中断状态,但不清除状态标志)


  publicbooleanisInterrupted(){


  returnisInterrupted(false);


  }


  可以看出上面两个方法都调用了isInterrupted(boolean)方法,查看源码:(参数是是否重置状态)


  this.interrupted()静态方法的研究--执行任何线程的此方法都相当于执行Thread.currentThread.interrupted(),会返回线程的中断状态并且会清除中断状态


  总之,停止线程给大家简单的介绍了一些,希望大家多看看。

抱歉!评论已关闭.