about Selector.select is block ,but jstack thread is runnable
fuyou
fuyou001 at gmail.com
Thu May 8 12:55:24 UTC 2014
the jstack:
NETTYSERVER-WORKER-19-thread-4" prio=10 tid=0x00000000136d3800
nid=0x75dc runnable [0x00000000499be000]
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 <0x000000076ce96e58> (a
io.netty.channel.nio.SelectedSelectionKeySet)
- locked <0x000000076ce96658> (a java.util.Collections$UnmodifiableSet)
- locked <0x000000076ce85be0> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:618)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:306)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
at java.lang.Thread.run(Thread.java:745)
the select doc :
/**
* Selects a set of keys whose corresponding channels are ready for I/O
* operations.
*
* <p> This method performs a blocking <a href="#selop">selection
* operation</a>. It returns only after at least one channel is selected,
* this selector's {@link #wakeup wakeup} method is invoked, or the current
* thread is interrupted, whichever comes first. </p>
*
* @return The number of keys, possibly zero,
* whose ready-operation sets were updated
*
* @throws IOException
* If an I/O error occurs
*
* @throws ClosedSelectorException
* If this selector is closed
*/
public abstract int select() throws IOException;
so the select is blocck unitl a channel is selected, but the jstack
java.lang.Thread.State: is RUNNABLE,why not is BLOCKED.
the offical api explain BLOCKED :
public static final Thread.State BLOCKEDThread state for a thread
blocked waiting for a monitor lock. A thread in the blocked state is
waiting for a monitor lock to enter a
synchronized block/method or reenter a synchronized block/method after
calling Object.wait.
because that's Select block until a channel is selected(not blocked
waiting for a monitor lock) ,so it not the thread state BLOCKED.
am i right ?
--
=============================================
fuyou001
Best Regards
More information about the core-libs-dev
mailing list