From 85b4eea8d750f360216b97a3b0ed987cc551e883 Mon Sep 17 00:00:00 2001 From: "PSp..om" Date: Mon, 18 Apr 2011 03:48:41 +0000 Subject: [PATCH] Name the executor threads based on something that might be useful to someone debugging thread dumps. ;) git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7258 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- .../jme3/network/base/ConnectorAdapter.java | 7 +- .../network/kernel/NamedThreadFactory.java | 70 +++++++++++++++++++ .../jme3/network/kernel/udp/UdpKernel.java | 4 +- 3 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 engine/src/networking/com/jme3/network/kernel/NamedThreadFactory.java diff --git a/engine/src/networking/com/jme3/network/base/ConnectorAdapter.java b/engine/src/networking/com/jme3/network/base/ConnectorAdapter.java index 968c6c8e9..b5ca1b507 100644 --- a/engine/src/networking/com/jme3/network/base/ConnectorAdapter.java +++ b/engine/src/networking/com/jme3/network/base/ConnectorAdapter.java @@ -42,6 +42,7 @@ import com.jme3.network.Message; import com.jme3.network.MessageListener; import com.jme3.network.kernel.Connector; import com.jme3.network.kernel.ConnectorException; +import com.jme3.network.kernel.NamedThreadFactory; import com.jme3.network.serializing.Serializer; /** @@ -67,7 +68,7 @@ public class ConnectorAdapter extends Thread private AtomicBoolean go = new AtomicBoolean(true); // Writes messages out on a background thread - private ExecutorService writer = Executors.newFixedThreadPool(1); + private ExecutorService writer; // Marks the messages as reliable or not if they came // through this connector. @@ -79,7 +80,9 @@ public class ConnectorAdapter extends Thread this.connector = connector; this.dispatcher = dispatcher; this.reliable = reliable; - setDaemon(true); + setDaemon(true); + writer = Executors.newFixedThreadPool(1, + new NamedThreadFactory(String.valueOf(connector) + "-writer")); } public void close() diff --git a/engine/src/networking/com/jme3/network/kernel/NamedThreadFactory.java b/engine/src/networking/com/jme3/network/kernel/NamedThreadFactory.java new file mode 100644 index 000000000..05cbe52ce --- /dev/null +++ b/engine/src/networking/com/jme3/network/kernel/NamedThreadFactory.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2011 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.jme3.network.kernel; + +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; + +/** + * A simple factory that delegates to java.util.concurrent's + * default thread factory but adds a prefix to the beginning + * of the thread name. + * + * @version $Revision$ + * @author Paul Speed + */ +public class NamedThreadFactory implements ThreadFactory +{ + private String name; + private ThreadFactory delegate; + + public NamedThreadFactory( String name ) + { + this( name, Executors.defaultThreadFactory() ); + } + + public NamedThreadFactory( String name, ThreadFactory delegate ) + { + this.name = name; + this.delegate = delegate; + } + + public Thread newThread( Runnable r ) + { + Thread result = delegate.newThread(r); + String s = result.getName(); + result.setName( name + "[" + s + "]" ); + return result; + } +} + diff --git a/engine/src/networking/com/jme3/network/kernel/udp/UdpKernel.java b/engine/src/networking/com/jme3/network/kernel/udp/UdpKernel.java index 1ed8fbc2b..c13f8d5ed 100644 --- a/engine/src/networking/com/jme3/network/kernel/udp/UdpKernel.java +++ b/engine/src/networking/com/jme3/network/kernel/udp/UdpKernel.java @@ -59,7 +59,7 @@ public class UdpKernel extends AbstractKernel private InetSocketAddress address; private HostThread thread; - private ExecutorService writer = Executors.newFixedThreadPool(2); + private ExecutorService writer; // The nature of UDP means that even through a firewall, // a user would have to have a unique address+port since UDP @@ -91,6 +91,8 @@ public class UdpKernel extends AbstractKernel if( thread != null ) throw new IllegalStateException( "Kernel already initialized." ); + writer = Executors.newFixedThreadPool(2, new NamedThreadFactory(toString() + "-writer")); + thread = createHostThread(); try {