java线程池

一、线程池的概念

1.系统启动时,创建大量线程执行任务,任务执行后,线程会变成空闲状态,等待下一次任务

2.优点是,节省资源,因为不断启动和关闭线程,会过度消耗资源

原理:

结合代码图就可以理解该原理图了:

二、核心线程池:ThreadPoolExcutor

1.corePoolSize:线程池核心池大小,在创建线程池后,默认没有任何线程。当有任务才会创建一个线程去执行,直到线程数达到corePoolSize,之后的任务会放到队列中。表示线程池允许同时运行的最大线程数

2.maximumPoolSize:线程池允许的最大线程数。

3.keepAliveTime:表示线程没有任务时,最多保持多久会停止。默认情况下,只有线程池数大于corePoolSize,keepAliveTime才会起作用,然后超过时间的非核心线程,会shundown

4.unit:keepAliveTime的单位

5.workQueue:阻塞队列,用于存储等待执行的任务

   5.1 有界队列ArrayBlockQueue:基于数组的先进先出队列,必须指定大小

   5.2 无界队列LinkedBlockingQueue:基于链表的先进先出,如果没有指定大小,默认无限大

   5.3 直接提交队列synchronousQueue:不会保存提交任务,直接新建线程来执行新的任务

6.threadFactory:线程工厂,用于创建线程

7.handler:表示当拒绝处理任务时的策略--当队列和线程池都已经饱和的时候

   7.1 AbortPolicy:丢弃任务并抛出异常

   7.2 CallerRunsPolicy:运行当前被丢弃的任务

   7.3 DiscardOldestPolicy:丢弃队列中最老的请求,也就是即将执行的任务,并尝试再次提交当前任务

   7.4 DiscardPolicy:丢弃任务,不会做任务处理

8.设置拒绝策略的二种方式

三、四种常用线程池

1.newCacheThreadPool():先看池中有没有以前建立的线程池,没有的话,创建新的线程;没有核心线程,有任务直接执行,无任务,60s后,回收线程,一般用于生存期很短的异步型任务

代码实现:

2.newFixedThreadPool(int n):创建可重用固定个数的线程池,以无界方式运行线程

3.newScheduledThreadPool(int n):创建定长线程池,支持定时及周期性任务

   3.1 线程池.schedule(Thread,1,TimeUnit.SECONDS):延迟一秒执行

   3.2 线程池.scheduleAtFixedRate(Thread,1,3,TimeUnit.SECONDS):延迟一秒后,每三秒执行

   

4.newSingleThreadExecutor:创建单线程的线程池,保证所有任务按照指定顺序执行

四、线程池的关闭

1.shundown():不会立即终止线程池,等所有任务缓存队列中的任务都执行才终止,不会接受新的任务

2.shundownNow():立即终止线程,并尝试打断执行执行的任务,清空任务缓存队列,返回未执行的任务

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值