对于ServerSocketChannel.register()方法堵塞的处理方法
这里我将accept作为一个类,其中包含有selector
按照类的设计,selector是在类初始化的时候通过Selector.open()方法自动获得的。
我本以为只需要在ServerSocketChannel.register()的时候,调用accept的方法,获取已经生成的selector就能实现注册。
时机情况是对于ServerSocketChannel.register()方法,必须得当场获取,当场注册。形如下面的代码
ServerSocketChannel serverChannel = ServerSocketChannel.open();
serverChannel.configureBlocking(false);
serverChannel.socket().bind(new InetSocketAddress(port), 150);
selector = Selector.open();
serverChannel.register(selector, SelectionKey.OP_ACCEPT);
如果使用了类的构造函数获得selector,而在某一个方法中进行serverSocketChannel的注册,将导致ServerSocketChannel.register()阻塞