33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
|
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()
|
||
|
)
|
||
|
}
|
||
|
}
|