On 05.08.2013 18:22, Mark Thomas wrote:
> On 05/08/2013 11:49, Rainer Jung wrote:
>> The "Thread-4" has stack
>>
>> java.lang.Thread.State: RUNNABLE
>> at sun.nio.ch.SolarisEventPort.portGet(Native Method)
>> at sun.nio.ch.SolarisEventPort.access$400(SolarisEventPort.java:38)
>> at
>> sun.nio.ch.SolarisEventPort$EventHandlerTask.run(SolarisEventPort.java:167)
>> at java.lang.Thread.run(Thread.java:724)
>>
>> and gets started between NioBlockingSelector.BlockPoller-2 and
>> ContainerBackgroundProcessor[StandardEngine[Catalina]]. Not sure whether
>> it is started by the JVM under the hood, but if we create it ourselves
>> we should probably give it a name.
Unfortunately we can't :(
Stack at thread creation is:
at java.lang.Thread.init(Thread.java:439)
at java.lang.Thread.<init>(Thread.java:479)
at sun.nio.ch.ThreadPool$1.newThread(ThreadPool.java:45)
at
sun.nio.ch.AsynchronousChannelGroupImpl$2.run(AsynchronousChannelGroupImpl.java:123)
at
sun.nio.ch.AsynchronousChannelGroupImpl$2.run(AsynchronousChannelGroupImpl.java:118)
at java.security.AccessController.doPrivileged(Native Method)
at
sun.nio.ch.AsynchronousChannelGroupImpl.startInternalThread(AsynchronousChannelGroupImpl.java:118)
at
sun.nio.ch.AsynchronousChannelGroupImpl.startThreads(AsynchronousChannelGroupImpl.java:132)
at sun.nio.ch.SolarisEventPort.start(SolarisEventPort.java:82)
at
sun.nio.ch.SolarisAsynchronousChannelProvider.openAsynchronousChannelGroup(SolarisAsynchronousChannelProvider.java:65)
at
java.nio.channels.AsynchronousChannelGroup.withCachedThreadPool(AsynchronousChannelGroup.java:233)
at
org.apache.tomcat.websocket.WsWebSocketContainer.<clinit>(WsWebSocketContainer.java:116)
at org.apache.tomcat.websocket.server.WsSci.init(WsSci.java:130)
at org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:47)
and the code in WsWebSocketContainer provides a thread factory that does
set a sensible name. But Thread-4 is some JDK internal thread we can't
influence. Here's the relevant snippet of JDK code:
117 private void startInternalThread(final Runnable task) {
118 AccessController.doPrivileged(new PrivilegedAction<Void>() {
119 @Override
120 public Void run() {
121 // internal threads should not be visible to
application so
122 // cannot use user-supplied thread factory
123
ThreadPool.defaultThreadFactory().newThread(task).start();
124 return null;
125 }
126 });
127 }
128
"./jdk/src/share/classes/sun/nio/ch/AsynchronousChannelGroupImpl.java"
So we have to live with that. Code looks the same in Java 8.
Regards,
Rainer
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]