From 5a9e33e6957a5aa2285439bad65de726d593e756 Mon Sep 17 00:00:00 2001 From: MiaoWoo Date: Wed, 17 Jun 2020 18:28:12 +0800 Subject: [PATCH] feat: add thread pool factory Signed-off-by: MiaoWoo --- packages/common/src/thread-pool.ts | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 packages/common/src/thread-pool.ts diff --git a/packages/common/src/thread-pool.ts b/packages/common/src/thread-pool.ts new file mode 100644 index 00000000..cc0f75e8 --- /dev/null +++ b/packages/common/src/thread-pool.ts @@ -0,0 +1,32 @@ +const Thread = Java.type('java.lang.Thread') +const ThreadGroup = Java.type("java.lang.ThreadGroup") +const AtomicInteger = Java.type("java.util.concurrent.atomic.AtomicInteger") +const ThreadPoolExecutor = Java.type('java.util.concurrent.ThreadPoolExecutor') +const LinkedBlockingQueue = Java.type("java.util.concurrent.LinkedBlockingQueue") + +interface ThreadPoolConfig { + corePoolSize?: number + maximumPoolSize?: number + keepAliveTime?: number + workQueueSize?: number + groupName: string +} + +export default { + create(config: ThreadPoolConfig): java.util.concurrent.ThreadPoolExecutor { + let threadCount = new AtomicInteger(0) + config = { + corePoolSize: 10, + maximumPoolSize: 100, + keepAliveTime: 60, + workQueueSize: 500, + ...config + } + return new ThreadPoolExecutor( + config.corePoolSize, config.maximumPoolSize, config.keepAliveTime, Packages.java.util.concurrent.TimeUnit.SECONDS, + new LinkedBlockingQueue(config.workQueueSize), + (run: any) => new Thread(new ThreadGroup(config.groupName), run, config.groupName + "-" + threadCount.incrementAndGet()), + new ThreadPoolExecutor.CallerRunsPolicy() + ) + } +}