标签:
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)
。
标签:
原文地址:http://my.oschina.net/djone/blog/474571