请在/两个线程之间给我提供一个selector.wakeup();
方法的工作示例。java nio选择器唤醒
我试图创建一个简单的程序,其中一个线程正在等待selector.select()方法。第二个线程创建一些套接字并尝试向选择器注册;第一个线程被阻塞。
因此,我需要使用选择器的wakeup
方法,但不知何故第一个线程不会出现阻塞模式。
唤醒方法状态的Javadoc:
如果另一线程当前在 Selector.select()或 Selector.select(长)方法的调用阻挡 然后 该调用将返回 立即。
P.S其他解决方法很少;其中之一是选择(超时),但我想弄清楚错误在哪里。
的伪代码:
第一线:
static Selector selector = Selector.open();
while(true) {
int n = selectorGlobal.select();
selectorKeySet = selectorGlobal.selectedKeys().iterator();
while (selectorKeySet.hasNext()) {
selectionKey = selectorKeySet.next();
if (selectionKey.isReadable()) {
//do something
}
if(selectionKey.isAcceptable()) {
//accept
}
}
}
第二个线程:
while (itr.hasNext()) {
data = (String) itr.next();
String IP = data.get(0);
String Port = data.get(1);
SocketChannel socketChannel = SocketChannel.open();
socketChannel.configureBlocking(true);
boolean isConnected = socketChannel.connect(new InetSocketAddress(IP, Port));
ClassName.selector.wakeup();
SelectionKey selectionKey = SelectSockets.registerChannel(ClassName.selector,
socketChannel, SelectionKey.OP_READ);
}
谢谢塞斯。连接到其他套接字是一种很少会发生的活动;因此我希望某种选择线程在每次选择键有活动时都不会检查某个集合/变量。 – Nilesh 2009-11-05 06:35:16