channel可相應中斷進入關閉狀態。
關鍵在於使用abstractinterruptiblechannel的begin()和end(completed)方法。
1、在begin()方法中 建立了interruptible介面的物件 interruptor中斷器,並使用blockon(interruptor)方法,將interruptor繫結到當前執行緒的blocker屬性。
2、當使用thread.interrupt()方法時首先會設定執行緒的中斷標誌位。然後呼叫blocker的interrupt(target)方法,改變channel的open屬性為false,然後將target賦值給channel的interrupted屬性。最後呼叫implclosechannel()方法,先關閉channel,再將channel註冊的所有selectionkey取消註冊。
3、enq(completed)方法進行最後的處理有可能會丟擲closedchannelexception(對已經關閉的channel進行i/o操作)和 asynchronouscloseexception(對i/o操作沒有結束的channel進行中斷取消)
public
abstract
class
abstractinterruptiblechannel
implements
channel
, interruptiblechannel
finally
3、類中的方法
1)、public final void close() throws ioexception {
關閉channel。將open=false,然後呼叫implclosechannel()方法。
2)、protected final void begin() {
3)、protected final void end(boolean completed)
可重入鎖,可中斷鎖,公平鎖的理解
執行緒鎖 1.可重入鎖 表明了鎖的分配機制 synchronized和reentrantlock都是可重入鎖 比如當乙個執行緒執行到synchronized方法method1,而method1方法中呼叫了另乙個synchrogazed方法method2 此時執行緒不需要重新申請一把鎖,可以直接執行m...
channel通道的一些細節
在go語言中需要使用內建函式make來建立乙個通道 make的第乙個引數是關鍵字chan,之後跟著允許通道交換的資料型別。如果建立的是乙個有快取的通道,之後還要再第二個引數指定快取區的大小。無快取的整形通道 unbuffered make chan int 有快取的字串通道 buffered mak...
一題一講 中斷(ISR)與可重入性
interrupt double compute area double radius 分析 1 isr不能有返回值,必須用void 2 isr不能傳遞引數,必須用void 3 isr應該是短而高效的,所以不推薦在isr中做浮點運算,應該只由中斷發出訊息或置位標誌然後由應用層去處理其他工作。且 在許...