码迷,mamicode.com
首页 > 编程语言 > 详细

并发编程:线程池使用

时间:2017-04-11 01:00:50      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:nbsp   扩展   定义   问题   and   for   get   reject   调用   

 

  • 线程池大小计算公式

  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) {};   
  1. newFixedThreadPool和newSingleThreadPool:在默认情况下使用无界的LinkedBlockingQueue
  2. newSingleThreadPool:通过线程封闭来实现线程安全性
  3. SynchronousQueue:不是真正的队列,是一种在线程之间的进行移交的机制,只有当线程池是无界或者可以拒绝服务时,才有实际价值
  4. newCachedThreadPool:使用了SynchronousQueue,有更好的排队性能
  5. 只有当任务相对独立时,为线程池或工作队列设置界限才是合理的,任务有依赖,则可能导致“饥饿”死锁问题
  6. 队列饱和策略:AbortPolicy、CallerRunsPolicy、DiscardPolicy、DiscardOldestPolicy
  7. 调用者运行(CallerRunsPolicy):服务器过载时,从线程池->工作队列->应用程序->TCP层,实现一种平缓的性能降低
  8. 通过Semaphore(信号量)来控制任务的提交速率: new Semaphore(bound)
  9. ThreadFactory可以自定义
  • 扩展ThreadPoolExecutor
  1. beforeExecute和afterExecute:可以添加日志、计时、监视和统计信息收集
  2. 线程池操作完成关闭操作时调用terminated

 

并发编程:线程池使用

标签:nbsp   扩展   定义   问题   and   for   get   reject   调用   

原文地址:http://www.cnblogs.com/hellocyc/p/6305512.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!