簡體   English   中英

當您調用線程的中斷()時會發生什么?

[英]What happens when you invoke a thread's interrupt()?

我需要知道會發生什么

  1. 它什么時候睡覺?
  2. 當它運行時,即它正在執行給定的任務。

提前致謝。

中斷一個線程是一種狀態安全的方式來取消它,但是線程本身必須被編碼以注意中斷。 如果在該線程執行時發生.interrupt() ,則拋出InterruptedException長阻塞 Java 操作將拋出該異常。

.interrupt()方法為該線程設置“中斷”標志並中斷任何 IO 或睡眠操作。 它不執行任何其他操作,因此由您的程序進行適當響應並定期通過Thread.interrupted()檢查其中斷標志。

如果一個線程不檢查中斷,它就不能安全地停止。 Thread.stop()使用起來不安全。 所以你使用.interrupt()來停止一個線程,但是在編寫多線程代碼時,你需要確保.interrupt()會做一些明智的事情。 這篇 TechRepublic 文章是一個很好的教程。

從您之前的問題來看,我假設您對 Java 的行為感興趣。

在 Java 中,如果線程當前正在阻塞,則會拋出InterruptedException 如果線程沒有阻塞,則不會拋出異常。

有關更多信息,請查看此處:
Java文檔

對於 .NET 語言,如果線程當前正在阻塞,則會拋出ThreadInterruptedException 如果線程沒有阻塞,則在線程阻塞之前不會拋出異常。

請用您想要回答的語言標記您的問題。

另一個值得分享的重要信息是,線程類中有兩種方法isInterrupted()interrupted() 后一個是靜態方法。 isInterrupted()方法調用不會改變 Thread 類的中斷屬性的狀態,而interrupted()靜態方法調用可以將中斷布爾值的值設置為 false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM