JAVA四种线程池

1.New Thread弊端

我们在执行异步任务的时候,经常new Thread

      new Thread(new Runnable() {
                public void run() {
                    System.out.println("do someThing");
                }
            });
        }

这样有许多弊端比如
a.每次 new Thread 新建性能差
b. 线程缺乏统一管理
c.缺乏更多功能,如定时执行,定期执行,线程中断

相比new Thread,Java提供四种线程池的好处
a.可重用存在的线程,减少对象的创建,消亡的开销,性能佳
b.可有效控制最大并发线程数,提高系统资源使用率,同时避免过多资源竞争,避免的堵塞
c.提供定时执行,定期执行,单线程,并发控制等功能。

2.线程池

Java提供Executors提供四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程;
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出线程会在队列中等待;
newScheduledThreadPool:创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor创建一个单线程化的线程池,他只会用唯一的工作线程来执行任务,保证所有任务按照顺序执行

总结来说就是newCachedThreadPool是复用线程;
newFIxedThreadPool是定长线程,可控制并发数量;
newSecheduledThreadPool 定时和周期任务执行;
newSingleThreadExecutor 保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行

ThreadPoolExecutor默认有四个拒绝策略:

1、ThreadPoolExecutor.AbortPolicy() 直接抛出异常RejectedExecutionException

2、ThreadPoolExecutor.CallerRunsPolicy() 直接调用run方法并且阻塞执行

3、ThreadPoolExecutor.DiscardPolicy() 直接丢弃后来的任务

4、ThreadPoolExecutor.DiscardOldestPolicy() 丢弃在队列中队首的任务

当然可以自己继承RejectedExecutionHandler来写拒绝策略.

参考:
https://blog.csdn.net/u011974987/article/details/51027795

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值