|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.nio.channels.spi.AbstractInterruptibleChannel java.nio.channels.SelectableChannel
public abstract class SelectableChannel
可通過 Selector
實作多路傳輸的通道。
為了與選擇器一起使用,此類別的實例必須首先通過 register
方法進行註冊。此方法返回一個表示該通道已向選擇器註冊的新 SelectionKey
物件。
向選擇器註冊後,通道在註銷 之前將保持註冊狀態。註銷涉及釋放選擇器已分派給該通道的所有資源。
不能直接註銷通道;相反,必須取消 表示通道註冊的鍵。取消某個鍵要求在選擇器的下一個選擇操作期間註銷通道。可通過調用某個鍵的 cancel
方法顯式地取消該鍵。無論是通過調用通道的 close
方法,還是中斷阻塞於該通道上 I/O 操作中的執行緒來關閉該通道,都會隱式地取消該通道的所有鍵。
如果選擇器本身已關閉,則將註銷該通道,並且表示其註冊的鍵將立即無效。
一個通道至多只能在任意特定選擇器上註冊一次。
可通過調用 isRegistered
方法來確定是否向一個或多個選擇器註冊了某個通道。
多個共時執行緒可安全地使用可選擇的通道。
isBlocking
方法來確定其阻塞網要。
新創建的可選擇通道總是處於阻塞網要。在結合使用基於選擇器的多路傳輸時,非阻塞網要是最有用的。向選擇器註冊某個通道前,必須將該通道置於非阻塞網要,並且在註銷之前可能無法返回到阻塞網要。
SelectionKey
,
Selector
建構子摘要 | |
---|---|
protected |
SelectableChannel()
初始化此類別的一個新實例。 |
方法摘要 | |
---|---|
abstract Object |
blockingLock()
獲取其 configureBlocking 和 register 方法實作同步的物件。 |
abstract SelectableChannel |
configureBlocking(boolean block)
調整此通道的阻塞網要。 |
abstract boolean |
isBlocking()
判斷此通道上的每個 I/O 操作在完成前是否被阻塞。 |
abstract boolean |
isRegistered()
判斷此通道當前是否已向任何選擇器註冊。 |
abstract SelectionKey |
keyFor(Selector sel)
獲取表示通道向給定選擇器註冊的鍵。 |
abstract SelectorProvider |
provider()
返回創建此通道的提供者。 |
SelectionKey |
register(Selector sel,
int ops)
向給定的選擇器註冊此通道,返回一個選擇鍵。 |
abstract SelectionKey |
register(Selector sel,
int ops,
Object att)
向給定的選擇器註冊此通道,返回一個選擇鍵。 |
abstract int |
validOps()
返回一個操作集,標識此通道所支持的操作。 |
從類別 java.nio.channels.spi.AbstractInterruptibleChannel 繼承的方法 |
---|
begin, close, end, implCloseChannel, isOpen |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
從介面 java.nio.channels.Channel 繼承的方法 |
---|
close, isOpen |
建構子詳細資訊 |
---|
protected SelectableChannel()
方法詳細資訊 |
---|
public abstract SelectorProvider provider()
public abstract int validOps()
public abstract boolean isRegistered()
由於鍵取消和通道註銷之間固有的延遲,所以在已取消某個通道的所有鍵後,該通道可能在一定時間內還會保持已註冊狀態。關閉通道後,該通道可能在一定時間內還會保持已註冊狀態。
public abstract SelectionKey keyFor(Selector sel)
public abstract SelectionKey register(Selector sel, int ops, Object att) throws ClosedChannelException
如果當前已向給定的選擇器註冊了此通道,則返回表示該註冊的選擇鍵。該鍵的相關操作集將更改為 ops,就像調用 interestOps(int)
方法一樣。如果 att 參數不為 null,則將該鍵的附件設置為該值。如果已取消該鍵,則拋出 CancelledKeyException
。
如果尚未向給定的選擇器註冊此通道,則註冊該通道並返回得到的新鍵。該鍵的初始可用操作集是 ops,並且其附件是 att。
可在任意時間調用此方法。如果調用此方法的同時正在進行另一個此方法或 configureBlocking
方法的調用,則在另一個操作完成前將首先阻塞該調用。然後此方法將在選擇器的鍵集上實作同步,因此如果調用此方法時共時地調用了涉及同一選擇器的另一個註冊或選擇操作,則可能阻塞此方法的調用。
如果正在進行此操作時關閉了此通道,則此方法返回的鍵是已取消的,因此返回鍵無效。
sel
- 要向其註冊此通道的選擇器ops
- 所得鍵的可用操作集att
- 所得鍵的附件,可能為 null
ClosedChannelException
- 如果此通道已關閉
IllegalBlockingModeException
- 如果此通道處於阻塞網要
IllegalSelectorException
- 如果此通道與給定的選擇器不是由相同的提供者創建的
CancelledKeyException
- 如果此通道當前已向給定的選擇器註冊,但是相應的鍵已經被取消
IllegalArgumentException
- 如果 ops 集的某個位不對應於此通道所支持的某個操作,也就是說,如果 set & ~validOps() != 0public final SelectionKey register(Selector sel, int ops) throws ClosedChannelException
調用此便捷方法的形式為
sc.register(sel, ops)與下列方法調用完全相同:
sc.register
(sel, ops, null)
sel
- 要向其註冊此通道的選擇器ops
- 所得鍵的可用操作集
ClosedChannelException
- 如果此通道已關閉
IllegalBlockingModeException
- 如果此通道處於阻塞網要
IllegalSelectorException
- 如果此通道與給定的選擇器不是由相同的提供者創建的
CancelledKeyException
- 如果此通道當前已向給定的選擇器註冊,但是相應的鍵已經被取消
IllegalArgumentException
- 如果 ops 集的某個位不對應於此通道所支持的某個操作,也就是說,如果 set & ~validOps() != 0public abstract SelectableChannel configureBlocking(boolean block) throws IOException
如果向一個或多個選擇器註冊了此通道,則嘗試將此通道置於阻塞網要將導致拋出 IllegalBlockingModeException
。
可在任意時間調用此方法。新的阻塞網要僅影響在此方法返回後發起的 I/O 操作。對於某些實作而言,這可能需要在所有掛起的 I/O 操作完成之前阻塞其他操作。
如果調用此方法的同時正在進行另一個此方法或 register
方法的調用,則在另一個操作完成前將首先阻塞該調用。
block
- 如果為 true,則此通道將被置於阻塞網要;如果為 false,則此通道將被置於非阻塞網要
ClosedChannelException
- 如果此通道已關閉
IllegalBlockingModeException
- 如果 block 為 true 並且此通道已向一個或多個選擇器註冊
IOException
- 如果發生 I/O 錯誤public abstract boolean isBlocking()
如果此通道已關閉,則此方法返回的值是未指定的。
public abstract Object blockingLock()
configureBlocking
和 register
方法實作同步的物件。在要求在短時間內維持特定阻塞網要的適配器實作中,這通常是很有用的。
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。