Thread.interrupted、Thread.isInterrupted、Thread.interrupt 谁践踏了优雅 2022-04-03 12:30 196阅读 0赞 ## **interrupt()** ## 调用线程的interrupt方法,并不能真正中断线程,只是给线程做了中断状态的标志 在一个线程中调用另一个线程的interrupt()方法,即会向那个线程发出信号——线程中断状态已被设置。至于那个线程何去何从,由具体的代码实现决定。 常见现象:“当调用interrupt方法时,调用对象的线程就会抛出InterruptedException异常”,如果检查线程中断状态并抛出InterruptedException异常的方法,那么 InterruptedException异常就不会被抛出。 ## **interrupted() 检查并清除中断状态** ## Thread.interrupted():测试当前线程是否处于中断状态。执行后将中断状态标志为false ## **isInterrupted() 检查中断状态** ## Thread.isInterrupted(): 测试线程Thread对象是否已经处于中断状态。但不具有清除功能. ## throsw InterruptedException ## 如果方法后面加了throsw InterruptedException,则表明该方法中可能会抛出InterruptedException异常,这包含下面两层含义: 1、是“花费时间”的方法 2、是“可以取消”的方法 ## **中断状态 interrupted status** ## 一种用于表示线程是否被中断的状态 ## **线程中断状态 ** ## ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29reHVld2Vp_size_16_color_FFFFFF_t_70][] \---------- interrupted()是静态方法:内部实现是调用的当前线程的isInterrupted(),并且会重置当前线程的中断状态 Thread.interrupted()返回值是true,说明当前线程已经被标记了中断状态, 官方文档对Thread.interrupted()的定义:测试当前线程是否已经中断,线程的中断状态也是由该方法清除。 isInterrupted()是实例方法,是调用该方法的对象所表示的那个线程的isInterrupted(),不会重置当前线程的中断状态 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29reHVld2Vp_size_16_color_FFFFFF_t_70]: /images/20220403/bdb10383ce2b44b09732e119109146f0.png
还没有评论,来说两句吧...