java线程池

7大参数:

1.corePoolSize:核心线程数,线程池创建好之后就准备就绪的线程数量,等待接受任务,不会回收,除非设置了allowCoreThreadTimeOut.

2.maximumPoolSize:最大线程数量,线程池中允许的最大线程数量,控制资源。

3.keepAliveTime:存活时间,如果当前线程数量大于核心线程数量。多出的线程等待一定时间后如果还是空闲着就释放。

4.unit:时间单位。

5.BlockingQueue<Runnable>:阻塞队列,如果任务有很多,就会将目前多的任务放在队列中,只要有线程空闲,就会去队列里面取出新的任务。

6.ThreadFactory:线程创建工厂。

7.RejectedExecutionHandler:如果队列中的任务满了,按照指定的拒绝策略拒绝执行任务。

工作顺序:

1.线程池创建,准备好corePoolSize数量的核心线程,准备接受任务

2.任务进来,用空闲的核心线程执行任务
        1)、核心线程用完了,就将新任务放入阻塞队列中。空闲的核心线程就会自己去阻塞队列获取任务执行
        2)、队列满了,就开新线程执行,最大只能开到maximumPoolSize数量的线程
        3)、任务执行完毕后,新开的maximumPoolSize - corePoolSize数量的空闲线程会在keepAliveTime时间后自动释放,最终保持corePoolSize数量的线程
       
4)、如果线程数达到最大线程数量,还有新任务进来,就会用RejectedExecutionHandler的拒绝策略来拒绝接受任务 

3.所有的线程都是由指定的ThreadFactory来创建的

线程池类型:

1.newFixedThreadPool:这是一个线程数固定的,线程可以重用的线程池,用共享的无界队列方式运行这些线程。如果所有的核心线程都在忙,这时又有新的任务来,这个新的任务会去队列中等待。如果一个线程在半路突然中止了,那么会有一个新的线程代替它执行后续的任务。一个线程在被关闭之前,它会一直在线程池中等待被调用。
特征:
        1.线程池中线程的量固定,可以控制线程的并发量。
        2.线程可以被重复利用
        3.任务数超出核心线程数时,那些额外的任务需要去队列中等待。如果队列中都挤满了,又有新的任务来,就会派额外的新线程去接客。如果达到了最大线程数后,还有新的任务来,那就直接抛异常。

2.newCachedThreadPool:它是根据需要,创建线程,没有核心线程,当60s内这个线程没接收到任务时,它就会被从池中收走。60s内这个线程又接收到新任务时,它就又被重用了。
特征:
        1.线程池中线程的数量不固定,最大值是Integer的最大值
        2.池中的线程干完活后会等待1分钟(默认的),如果1分钟内又有新任务,这个线程就被调用去干新任务了,如果等了1分钟还没有新任务,这个线程就被从池中清理出去了。
        3.当池中没有可用线程时,就创建一个新线程。

3.newSingleThreadPool:这个线程池中只有1个线程,用无界队列的方式运行。如果这个线程突然挂掉了,线程池会新建一个新的线程顶替它,继续完成任务。
特征:池中只有1个线程,任务要在队列中排队。当需要保证任务执行顺序时,适合用它。

4.newScheduleThreadPool:创建一个线程池,可以让它里面的线程延迟执行,或在规定的时间后执行。
特征:
        1.这个池中的线程,可以让它们延迟干活,或规定时间干活。
        2.线程池中的线程数量固定,即使没有任务,这些线程也保留。

5.newWorkStealingPool:jdk1.8提供的线程池,底层使用ForkJoinPool实现,池中有多个任务队列。适用于任务多,可以并发执行的场景。
​​​​​​特征:池中有多个队列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值