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()
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user