从设置线程状态的角度来看,这两种方法我不太清楚。
Java Docs 说 Thread.interrupt() 设置线程中断状态标志,调用 Thread.interrupted() 方法给出线程的状态并清除标志。
当这在实际场景中使用时..??
从设置线程状态的角度来看,这两种方法我不太清楚。
Java Docs 说 Thread.interrupt() 设置线程中断状态标志,调用 Thread.interrupted() 方法给出线程的状态并清除标志。
当这在实际场景中使用时..??
当其他一些线程调用 Thread.interrupt() 时,该方法将 Thread 的中断状态标志(最初为 false)设置为 true。如果线程处于阻塞方法中,例如 Thread.sleep()、Thread.join() 或 Object.wait(),它会解除阻塞并抛出 InterruptedException。
Thread.interrupted() 是一个静态方法,可用于检查中断状态标志的当前值,真或假。它还清除中断状态,将标志设置为假。那就是连续调用它两次,即使它第一次返回true,第二次也可能返回false(除非线程再次被中断,在第一次调用后将中断状态标志设置为true)
注意第三种方法 Thread.isInterrupted() 可以在不重置的情况下检查中断状态。
典型用例:
while(true)
不好,while(!Thread.interrupted())
更好)您可以使用 Thread.interrupt() 告诉线程停止。当该线程执行一些阻塞操作或检查标志时,它会触发它抛出 InterruptedException 以唤醒线程或停止它。
虽然 interrupt() 的目的通常是停止线程,但这并不意味着它会。可以长时间忽略中断或完全忽略中断。如果它触发了 InterruptedException,则可以捕获并记录(或忽略)而不是停止线程。
注意:对于 ExecutorService 中的线程,中断任务会中断线程,并且 ExecutorService 会根据设计捕获这一点并且不会关闭线程。