结论: register得放在select之前进行
Thread Dump信息:
"Poller-1" prio=6 tid=0x040f0400 nid=0x408 runnable [0x044df000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.j
ava:295)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelector
Impl.java:277)
at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:158)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87)
- locked <0x23b7df70> (a sun.nio.ch.Util$2)
- locked <0x23b7df60> (a java.util.Collections$UnmodifiableSet)
- locked <0x23b7dd40> (a sun.nio.ch.WindowsSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98)
at com.zhh.nio.NioServer$Poller.run(NioServer.java:132)
at java.lang.Thread.run(Thread.java:722)
"Poller-0" prio=6 tid=0x040f0000 nid=0x14e4 runnable [0x0439f000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.j
ava:295)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelector
Impl.java:277)
at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:158)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87)
- locked <0x23b77a98> (a sun.nio.ch.Util$2)
- locked <0x23b77a20> (a java.util.Collections$UnmodifiableSet)
- locked <0x23b76aa0> (a sun.nio.ch.WindowsSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98)
at com.zhh.nio.NioServer$Poller.run(NioServer.java:132)
at java.lang.Thread.run(Thread.java:722)
"Acceptor" prio=6 tid=0x040ef800 nid=0x1250 waiting for monitor entry [0x03f1f00
0]
java.lang.Thread.State: BLOCKED (on object monitor)
at sun.nio.ch.SelectorImpl.register(SelectorImpl.java:133)
- waiting to lock <0x23b7df60> (a java.util.Collections$UnmodifiableSet)
at java.nio.channels.spi.AbstractSelectableChannel.register(AbstractSele
ctableChannel.java:207)
- locked <0x23b8da18> (a java.lang.Object)
at java.nio.channels.SelectableChannel.register(SelectableChannel.java:2
77)
at com.zhh.nio.NioSession.register(NioSession.java:50)
at com.zhh.nio.NioServer$Poller.register(NioServer.java:123)
at com.zhh.nio.NioServer.handleNewSession(NioServer.java:222)
at com.zhh.nio.NioServer$Acceptor.run(NioServer.java:236)
at java.lang.Thread.run(Thread.java:722)
Code层面:
select:
private int lockAndDoSelect(long timeout) throws IOException {
synchronized (this) {
if (!isOpen())
throw new ClosedSelectorException();
synchronized (publicKeys) {
synchronized (publicSelectedKeys) {
return doSelect(timeout);
}
}
}
}
register:
protected final SelectionKey register(AbstractSelectableChannel ch,
int ops,
Object attachment)
{
if (!(ch instanceof SelChImpl))
throw new IllegalSelectorException();
SelectionKeyImpl k = new SelectionKeyImpl((SelChImpl)ch, this);
k.attach(attachment);
synchronized (publicKeys) {
implRegister(k);
}
k.interestOps(ops);
return k;
}
分享到:
相关推荐
NIO入门.chm NIO入门.chm NIO入门.chm
【IT十八掌徐培成】Java基础第27天-03.NIO-Selector.zip
NioServer.java
NIO笔记.doc
Java I/O, NIO, and NIO.2 is a power-packed book that accelerates your mastery of Java's various I/O APIs. In this book, you'll learn about classic I/O APIs (File, RandomAccessFile, the stream classes ...
赠送jar包:xnio-nio-3.8.0.Final.jar; 赠送原API文档:xnio-nio-3.8.0.Final-javadoc.jar; 赠送源代码:xnio-nio-3.8.0.Final-sources.jar; 赠送Maven依赖信息文件:xnio-nio-3.8.0.Final.pom; 包含翻译后的API...
java NIO.zip
【IT十八掌徐培成】Java基础第27天-04.NIO-Selector-Server-Client.zip
Java_NIO类库Selector机制解析.docJava_NIO类库Selector机制解析.docJava_NIO类库Selector机制解析.docJava_NIO类库Selector机制解析.doc
NIO流程.txtNIO流程.txtNIO流程.txtNIO流程.txtNIO流程.txtNIO流程.txt
java nio 演示代码
JAVANIO简介.pdf
java nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava ...
Tutorialspoint Java NIO 教程.epub
NULL 博文链接:https://goon.iteye.com/blog/1775421
赠送jar包:xnio-nio-3.8.0.Final.jar; 赠送原API文档:xnio-nio-3.8.0.Final-javadoc.jar; 赠送源代码:xnio-nio-3.8.0.Final-sources.jar; 赠送Maven依赖信息文件:xnio-nio-3.8.0.Final.pom; 包含翻译后的API...
New I/O (NIO), and NIO.2 categories. You learn what each category offers in terms of its capabilities, and you also learn about concepts such as paths and Direct Memory Access. Chapters 2 through 5 ...
赠送jar包:xnio-nio-3.8.4.Final.jar; 赠送原API文档:xnio-nio-3.8.4.Final-javadoc.jar; 赠送源代码:xnio-nio-3.8.4.Final-sources.jar; 赠送Maven依赖信息文件:xnio-nio-3.8.4.Final.pom; 包含翻译后的API...