簡體   English   中英

NIO中可配置的阻止和非阻塞請求

[英]Configurable blocking and non-blocking requests in NIO

我打算將java NIO用於我的項目,但我的一個要求是保持請求可配置,即客戶端可以選擇以下請求:1。阻塞,2。非阻塞。

那么,是否可以在同步中使用NIO。 方式?

創建頻道時,客戶端代碼上有一個選項:

SocketChannel socketChannel = SocketChannel.open();
socketChannel.configureBlocking(true);

但是,當我將其設為真時,我會收到此錯誤。

是我在本教程中使用的客戶端代碼。

java.nio.channels.IllegalBlockingModeException
    at java.nio.channels.spi.AbstractSelectableChannel.register(AbstractSelectableChannel.java:172)
    at java.nio.channels.SelectableChannel.register(SelectableChannel.java:254)
    at com.dds.client.DDSClient.run(DDSClient.java:77)
    at java.lang.Thread.run(Thread.java:680)

register(...)的javadoc聲明如果在阻塞模式的通道上調用該方法, 則會拋出該異常。 選擇器只能處理非阻塞通道。

您需要更改代碼以使用阻塞操作(例如readwrite ),而不是在需要阻止語義時registerselect

正如Javadocs所說,你不能在阻塞通道上使用select()。 您或多或少必須使用每個通道的線程模型。

這個奇怪的要求是什么原因?

暫無
暫無

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

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