feat: add thread pool factory
Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
parent
b98409abe7
commit
5a9e33e695
32
packages/common/src/thread-pool.ts
Normal file
32
packages/common/src/thread-pool.ts
Normal file
@ -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()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user