首页 > 代码库 > 并发编程:线程池使用
并发编程:线程池使用
- 线程池大小计算公式
N_thread = N_cpu * U_cpu * (1+W/C)
U_cpu: target of CPU utilization
W/C: rate of wait time to compute time
- 配置ThreadPoolExecutor
public ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory,
RejectedExecutionHandler handler) {};
- newFixedThreadPool和newSingleThreadPool:在默认情况下使用无界的LinkedBlockingQueue
- newSingleThreadPool:通过线程封闭来实现线程安全性
- SynchronousQueue:不是真正的队列,是一种在线程之间的进行移交的机制,只有当线程池是无界或者可以拒绝服务时,才有实际价值
- newCachedThreadPool:使用了SynchronousQueue,有更好的排队性能
- 只有当任务相对独立时,为线程池或工作队列设置界限才是合理的,任务有依赖,则可能导致“饥饿”死锁问题
- 队列饱和策略:AbortPolicy、CallerRunsPolicy、DiscardPolicy、DiscardOldestPolicy
- 调用者运行(CallerRunsPolicy):服务器过载时,从线程池->工作队列->应用程序->TCP层,实现一种平缓的性能降低
- 通过Semaphore(信号量)来控制任务的提交速率: new Semaphore(bound)
- ThreadFactory可以自定义
- 扩展ThreadPoolExecutor
- beforeExecute和afterExecute:可以添加日志、计时、监视和统计信息收集
- 线程池操作完成关闭操作时调用terminated
并发编程:线程池使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。