为什么新的I / O工作者都是RUNNABLE?

时间:2016-07-19 15:14:09

标签: java multithreading nio

我刚刚发现我的Karaf OSGi容器有很多“新I / O工作线程”,所有这些线程都处于RUNNING状态。
我认为'服务器soket接受器'线程总是运行是合理的,因为他们“一直在监听连接”是没有用的“睡觉”。任何其他线程通常处于WAITING状态(使用不同的java机制),以使某些工作看起来让自己忙碌。

那么新的I / O工作者实际上做了什么?

    "New I/O  worker #31" - Thread t@772
       java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
        at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
        at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)
        at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87)
        - locked <37500e09> (a sun.nio.ch.Util$2)
        - locked <857d58a> (a java.util.Collections$UnmodifiableSet)
        - locked <63863c4b> (a sun.nio.ch.EPollSelectorImpl)
        at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98)
        at org.jboss.netty.channel.socket.nio.SelectorUtil.select(SelectorUtil.java:64)
        at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:244)
        at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:35)
        at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:102)
        at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)

JVisualVM显示100%'正在运行'时间和0%'等待'时间 为什么他们在每次“资源可用性检查”后都没有“睡觉”一段时间?任何其他线程是否合理设计?

0 个答案:

没有答案