diff --git a/core/src/main/java/com/seibel/distanthorizons/core/generation/WorldGenerationQueue.java b/core/src/main/java/com/seibel/distanthorizons/core/generation/WorldGenerationQueue.java index a8812bcee..a23442827 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/generation/WorldGenerationQueue.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/generation/WorldGenerationQueue.java @@ -34,6 +34,8 @@ public class WorldGenerationQueue implements Closeable, IDebugRenderable { private static final Logger LOGGER = DhLoggerBuilder.getLogger(); + public static final DhThreadFactory THREAD_FACTORY = new DhThreadFactory(ThreadUtil.THREAD_NAME_PREFIX + "Gen-Worker-Thread", Thread.MIN_PRIORITY); + private final IDhApiWorldGenerator generator; /** contains the positions that need to be generated */ @@ -497,8 +499,6 @@ public class WorldGenerationQueue implements Closeable, IDebugRenderable // executor handler methods // //==========================// - public static final DhThreadFactory THREAD_FACTORY = new DhThreadFactory("Gen-Worker-Thread", Thread.MIN_PRIORITY); - /** * Creates a new executor.
* Does nothing if an executor already exists. diff --git a/core/src/main/java/com/seibel/distanthorizons/core/util/ThreadUtil.java b/core/src/main/java/com/seibel/distanthorizons/core/util/ThreadUtil.java index acf41f67e..3045927fb 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/util/ThreadUtil.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/util/ThreadUtil.java @@ -4,11 +4,18 @@ import com.seibel.distanthorizons.core.config.listeners.ConfigChangeListener; import com.seibel.distanthorizons.core.config.types.ConfigEntry; import com.seibel.distanthorizons.core.util.objects.DhThreadFactory; import com.seibel.distanthorizons.core.util.objects.RateLimitedThreadPoolExecutor; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.util.concurrent.*; public class ThreadUtil { + private static final Logger LOGGER = LogManager.getLogger(); + + /** The prefix isn't strictly required, but makes debugging and profiling much easier. */ + public static String THREAD_NAME_PREFIX = "DH-"; + public static int MINIMUM_RELATIVE_PRIORITY = -4; public static int DEFAULT_RELATIVE_PRIORITY = 0; @@ -26,7 +33,7 @@ public class ThreadUtil } public static RateLimitedThreadPoolExecutor makeRateLimitedThreadPool(int poolSize, String name, int relativePriority, ConfigEntry runTimeRatioConfigEntry) { - DhThreadFactory threadFactory = new DhThreadFactory("DH-" + name, Thread.NORM_PRIORITY + relativePriority); + DhThreadFactory threadFactory = new DhThreadFactory(THREAD_NAME_PREFIX + name, Thread.NORM_PRIORITY + relativePriority); return makeRateLimitedThreadPool(poolSize, threadFactory, runTimeRatioConfigEntry); } public static RateLimitedThreadPoolExecutor makeRateLimitedThreadPool(int poolSize, DhThreadFactory threadFactory, ConfigEntry runTimeRatioConfigEntry) @@ -39,6 +46,12 @@ public class ThreadUtil THREAD_CHANGE_LISTENERS_BY_THREAD_NAME.remove(threadFactory.threadName); } + if (!threadFactory.threadName.startsWith(THREAD_NAME_PREFIX)) + { + // this will only happen if a ThreadFactory is passed in that doesn't have the correct thread name + LOGGER.warn("Thread pool with the name ["+threadFactory.threadName+"] is missing the expected Distant Horizons thread prefix ["+THREAD_NAME_PREFIX+"]."); + } + RateLimitedThreadPoolExecutor executor = makeRateLimitedThreadPool(poolSize, runTimeRatioConfigEntry.get(), threadFactory); @@ -52,7 +65,7 @@ public class ThreadUtil /** should only be used if there isn't a config controlling the run time ratio of this thread pool */ public static RateLimitedThreadPoolExecutor makeRateLimitedThreadPool(int poolSize, String name, Double runTimeRatio, int relativePriority) { - return new RateLimitedThreadPoolExecutor(poolSize, runTimeRatio, new DhThreadFactory("DH-" + name, Thread.NORM_PRIORITY + relativePriority)); + return new RateLimitedThreadPoolExecutor(poolSize, runTimeRatio, new DhThreadFactory(THREAD_NAME_PREFIX + name, Thread.NORM_PRIORITY + relativePriority)); } public static RateLimitedThreadPoolExecutor makeRateLimitedThreadPool(int poolSize, Double runTimeRatio, DhThreadFactory threadFactory) { @@ -70,7 +83,7 @@ public class ThreadUtil return new ThreadPoolExecutor(/*corePoolSize*/ poolSize, /*maxPoolSize*/ poolSize, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), - new DhThreadFactory("DH-" + name, Thread.NORM_PRIORITY + relativePriority)); + new DhThreadFactory(THREAD_NAME_PREFIX + name, Thread.NORM_PRIORITY + relativePriority)); } public static ThreadPoolExecutor makeThreadPool(int poolSize, Class clazz, int relativePriority) { return makeThreadPool(poolSize, clazz.getSimpleName(), relativePriority); }