WO想要Executor线程池,WO还想要限制线程池大小,WO还想要线程闲置超时能自动销毁。
好的~
ThreadPoolExecutor mThreadPool = new ThreadPoolExecutor(poolSize, 0, maxIdleTime, TimeUnit.SECONDS, LinkedBlockingQueue<Runnable>()); // poolSize为线程池大小;maxIdleTime为允许的闲置时间,超时即毁 mThreadPool.allowCoreThreadTimeOut(true); //允许超时后销毁线程 mThreadPool.execute(Runnable() { run() { // OOXXOO } }
===========================================================
详细的代码功能,参见 :
1, Executors.new*ThreadPool()代码;
2, oracle java 文档 节选:
- 排队:
- 直接提交。
SynchronousQueue
,它将任务直接提交给线程而不保持它们。在此,?如果不存在可用于立即运行任务的线程,则试图把任务加入队列将失败,因此会构造一个新的线程。? - 无界队列。使用无界队列(例如,不具有预定义容量的
LinkedBlockingQueue
)将导致在所有 corePoolSize 线程都忙时新任务在队列中等待。这样,创建的线程就不会超过 corePoolSize。(因此,maximumPoolSize 的值也就无效了。)
- 如果希望确保回收取消引用的池:设置适当保持活动时间,使用 0 核心线程的下边界和/或设置
allowCoreThreadTimeOut(boolean)
。
时间: 2024-10-24 23:51:48