博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NIO[SelectableChannel.register和Selector.select会有锁等待冲突]
阅读量:4214 次
发布时间:2019-05-26

本文共 2979 字,大约阅读时间需要 9 分钟。

 

结论: 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;
    }

转载地址:http://emdmi.baihongyu.com/

你可能感兴趣的文章
UVa 455 周期串 (Periodic Strings)
查看>>
习题 3-5 谜题 Puzzle (World Finals 1993) UVa 227
查看>>
习题3-6 纵横字谜的答案(Crossword Answers) UVa 232
查看>>
csp 俄罗斯方块
查看>>
UI控件-> Scroll Pane(滑动面板)
查看>>
UI控件 -> ListView
查看>>
CSP - 2017 -09 - 2 公共钥匙盒
查看>>
UI控件-> ListView(2)
查看>>
HDU1062 Text Reverse
查看>>
CSP 2015 03 04 网络延时 DFS BFS
查看>>
八皇后问题
查看>>
hdoj 2037 看的节目最多
查看>>
hdoj 1051 Wooden Sticks
查看>>
DFS寻找路径~
查看>>
寻找最短路径BFS
查看>>
DFS判断有无环
查看>>
BFS/DFS 判断是否是二分图
查看>>
hdoj 1789
查看>>
csp 2014_9_4 最优配餐
查看>>
判断有向图图是否有环
查看>>