4.1.5.3. interrupt
方法結束執行緒使用interrupt()方法來中斷執行緒有兩種情況:
1. 執行緒處於阻塞狀態:如使用了sleep,同步鎖的wait,socket中的receiver,accept等方法時,會使執行緒處於阻塞狀態。當呼叫執行緒的interrupt()方法時,會丟擲interruptexception異常。阻塞中的那個方法丟擲這個異常,通過**捕獲該異常,然後break跳出迴圈狀態,從而讓我們有機會結束這個執行緒的執行。通常很多人認為只要呼叫interrupt方法執行緒就會結束,實際上是錯的, 一定要先捕獲interruptedexception異常之後通過break來跳出迴圈,才能正常結束run方法。
2.執行緒未處於阻塞狀態:使用isinterrupted()判斷執行緒的中斷標誌來退出迴圈。當使用interrupt()方法時,中斷標誌就會置true,和使用自定義的標誌來控制迴圈是一樣的道理。
public class threadsafe extends thread catch(interruptedexception e)}}
}說明:
2、被volatile關鍵字修飾的變數,在乙個執行緒中被修改後,其它執行緒立即可見,這叫volatile關鍵字的可見性;
3、當執行緒處於阻塞狀態時,在其它執行緒中呼叫這個執行緒的interrupt()方法時,才會丟擲interruptexception異常,同事一定要先捕獲這個異常。
4、當執行緒處於非阻塞狀態時,不丟擲interruptexception異常,可以正常退出。
執行緒的interrupt方法
如下 片段 thread thread new thread thread.start thread.interrupt system.out.println end 呼叫了interrupt方法卻沒有產生中斷的原因 對執行緒的interrupt是對執行緒處在sleep,wait,join狀態的時候...
執行緒常用方法 interrupt
一 thread.sleep 為什麼要丟擲 interruptedexception 其實最主要的目的是為了讓被打斷的執行緒具有響應中斷的能力 打斷只是設定標記而已,目的是為了讓被打斷的執行緒擁有感知能力,是否應該被打斷由自己控制,而不是由外部的執行緒去決定 具體可以參考這篇部落格,寫的挺好的 二 ...
java多執行緒interrupt 方法
執行緒a與執行緒b,在業務中,常常因為執行緒之前的業務關係,需要互相影響,甚至是a去中斷b,thread.interrupt 提供了這樣乙個操作。例子 package com.threadtest public class threadinterruptedtest catch interrupte...