2017-08-28 4 views

答えて

2

これはSelectableChannel javadocからのものである:

チャネルセレクタに登録される前に、非ブロッキングモードに置かなければならず、は、それが登録解除されるまでブロックモードに戻すことがなくてもよいです。

register()のJavadocを参照してください:https://docs.oracle.com/javase/7/docs/api/java/nio/channels/SelectableChannel.html#register(java.nio.channels.Selector,%20int)

public final SelectionKey register(Selector sel, int ops)

を例外:

IllegalBlockingModeException - If this channel is in blocking mode 

これはregister()がどのように見えるかです:

public final SelectionKey register(Selector sel, int ops, 
            Object att) 
    throws ClosedChannelException 
{ 
    if (!isOpen()) 
     throw new ClosedChannelException(); 
    if ((ops & ~validOps()) != 0) 
     throw new IllegalArgumentException(); 
    synchronized (regLock) { 
     if (blocking) 
      throw new IllegalBlockingModeException(); 
... 
1

ブロックするセレクタを使用しているのはいつですか?ServerSocketChannel

ありません。サポートされていません。

通常、セレクタはチャンネルをブロックするためにどのように機能しますか?

これはありません。あなたがそれを試してみるとIllegalBlockingModeExceptionが得られます。

関連する問題