[英]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聲明如果在阻塞模式的通道上調用該方法, 則會拋出該異常。 選擇器只能處理非阻塞通道。
您需要更改代碼以使用阻塞操作(例如read
或write
),而不是在需要阻止語義時register
和select
。
正如Javadocs所說,你不能在阻塞通道上使用select()。 您或多或少必須使用每個通道的線程模型。
這個奇怪的要求是什么原因?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.