我有一个初始化如下的Java ThreadPool:
ThreadFactory tFactory = new DatabaseWorkerThreadFactory();
final ExecutorService dbService = new ThreadPoolExecutor(1, 5, 10L, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(10), tFactory);
然后像这样在该线程池上执行 Runnable Task
executorService.execute(new RunnableDbInsertTask(netData));
使这些插入与我的其余代码异步。
当我使用 ActiveJDBC 作为 ActiveRecord 实现时,我需要每个工作人员都有一个活动的连接,我在RunnableDbInsertTask
'srun()
方法的开头有这个代码:
if(!Base.hasConnection())
Base.open(params);
因此,当ThreadPoolExecutor
使用 时,每个Thread
获得任务的新生成的都会有一个唯一的连接,并且会为每个连接重用它。
ThreadPoolExecutor's
现在,当没有要完成的工作时, 我希望线程数量回退到构造函数中指定的最小值 (1) 。
为了正确地发生这种情况,我需要当一个线程ThreadPoolExecutor
由于不活动而自动完成时,它会自动完成它的连接调用 ActiveJDBC 的Base.close()
方法
作为解决方案,我尝试了覆盖DatabaseWorker.interrupt()
方法,但没有奏效。
任何帮助表示赞赏。谢谢!