java 线程池

1.ThreadPoolExecutor 构造器参数解析

1.1 int corePoolSIze 核心线程池大小

      线程池内主力;当线程池刚创建时,线程池内不会主动创建线程,只有当任务来临才会考虑创建线程;任务结束,并不会销毁线程,而是将线程放入线程池中;当线程池的线程数==corePoolSize

1.2 int maximumPoolSize 线程池最大的容量(maximumPoolSize - corePoolSIze  的差值相当于球员的后备队员

      当任务结束,属于差值的线程,将被销毁

1.3 long keepAliveTime 会被销毁的线程--缓存时间

1.4 TimeUnit unit  缓存时间的单位

1.5 四种阻塞的队列,(也就是当线程池满了之后,再进来的任务都会放到这个阻塞队列中等待)

     SynchronousQueue  --直接提交策略(适用于CachedThreadPool);直接将任务交给线程,若不存在可用的线程,加入队列将失败,失败将创建一个新线程。(问题:此队列将严重依赖maximumPoolSize 的大小,以避免拒绝新提交的任务)

      LinkedBlockingQueue --无界队列(适用于FixedThreadPool与SingleThreadExcutor),基于链表的阻塞队列,创建的线程数不会超过corePoolSizes(maximumPoolSize值与其一致),当线程正忙时,任务进入队列等待。按照FIFO原则对元素进行排序,吞吐量高于ArrayBlockingQueue

     ArrayListBlockingQueue——有界队列;有界队列,有助于防止资源耗尽,但是可能较难调整和控制。队列大小和最大池大小可能需要相互折衷:使用大型队列和小型池可以最大限度地降低 CPU 使用率、操作系统资源和上下文切换开销,但是可能导致人工降低吞吐量。如果任务频繁阻塞(例如,如果它们是 I/O边界),则系统可能为超过您许可的更多线程安排时间。使用小型队列通常要求较大的池大小,CPU使用率较高,但是可能遇到不可接受的调度开销,这样也会降低吞吐量
   ????第四种阻塞队列呢?

 1.6 RejectedExecutionHandler handler 无法执行任务的策略(当阻塞队列满了,后备线程也满了,将启动)

       ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常

       ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常

       ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)

       ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务

1.7 threadFactory 用于创建线程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值