Channel(一) 可中斷的能力

2021-10-05 23:43:46 字數 992 閱讀 9791

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中做浮點運算,應該只由中斷發出訊息或置位標誌然後由應用層去處理其他工作。且 在許...