线程中断
2021-03-20 21:25
标签:执行 shu 一个 取消 异常 作用 html jin http -- 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任务。Java没有提供一种安全直接的方法来停止某个线程,但是Java提供了中断机制。 -- 一个线程不应该由其他线程来强制停止,而是应该由该线程自己自行停止。所以Thread.stop,Thread.suspend,Thread.resume都已经被废弃了。 -- Thread.interrupt()的作用其实也不是中断某一个线程,而是通知某一个线程你该中断了。具体到底中断还是继续运行,应该由被通知的线程自己处理。具体来说,当对一个线程调用interrupt()方法时: 1、如果线程正处于阻塞状态(例如sleep,wait,join等状态),那么线程将立即退出阻塞状态,并抛出一个InterruptedException异常,同时清除中断标志。仅此而已。 2、如果线程正处于正常运行状态,那么会将该线程的中断标志设置为true,仅此而已。被设置中断标志的线程将继续正常运行,不受任何影响。 -- 如果一个线程有需要被中断的需求时: 1、在正常运行任务时,while()循环经常检验本线程的中断标志位,如果被设置了中断标志就自行停止线程。 2、在调用阻塞方法时,正确处理InterruptedException异常(catch异常之后,结束当前线程,并选择是否向上抛出该异常) -- java.lang.Thread类提供了如下方法来操作中断 1、public static boolean interrupted():测试当前线程是否已经中断,同时清除中断标志。(即如果连续两次调用该方法,则第二次调用将返回false) 2、public boolean isInterrupted():测试当前线程是否已经中断,但不清除中断标志。 3、public void interrupt():中断某一线程。 注意,interrupt()方法是唯一能将中断状态设置为true的方法。静态方法interrupted()会将当前线程的中断状态清除。 -- java.lang.Thread类下的stop()方法被废弃 1、调用stop()方法会立刻停止run()方法中剩余的全部工作,包括在catch或finally语句中的,并抛出ThreadDeath异常。可能导致一些清理性工作得不到完成,如文件,数据库等的关闭。 2、调用stop()方法会立即释放该线程所持有的锁,导致数据得不到同步,出现数据一致性问题。 (原文参考:https://www.jianshu.com/p/48b81410300a) (原文参考:https://www.cnblogs.com/jinggod/p/8486096.html) (原文参考:https://www.cnblogs.com/liyutian/p/10196044.html) 线程中断 标签:执行 shu 一个 取消 异常 作用 html jin http 原文地址:https://www.cnblogs.com/Icarus-/p/13837730.html
下一篇:java标签的分类