Java的Executors(线程池)使用

多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。
如果一次要处理100个请求,并且每个请求需要一个单独的线程完成。就可以采用多线程的方式,100个请求直接从线程池获取,无需每次都创建一次线程提高速度。

好了,进入正题:如何去创建一个线程池?
需要了解的是java.util.concurrent.Executors类的API,这个类提供大量创建连接池的静态方法
1、
// 创建一个可重用固定线程数的线程池
ExecutorService pool = Executors.newFixedThreadPool(7);
pool.execute(……);
// 关闭线程池
pool.shutdown();
newFixedThreadPool的参数指定了可以运行的线程的最大数目,超过这个数目的线程加进去以后,不会运行。其次,加入线程池的线程属于托管状态,线程的运行不受加入顺序的影响。
缺点: 不能随时建新的线程,无法灵活扩展,多出的任务要进行排队

2、 newCachedThreadPool() 缓存型池子
newFixedThreadPool差不多,如果有任务就建立一个线程放到池中,时间过期自动回收,可以自动扩展
缺点:当任务量非常大的时候,没有及时回收,可能引起内存溢出


3、SingleThreadExecutor 单例线程
newFixedThreadPool差不多,但是数量只有1,单利线程
缺点,无法充分利用多核

4、延迟连接池,newScheduledThreadPool
这个池子里的线程可以按schedule依次delay执行,或周期执行
ScheduledExecutorService pool = Executors.newScheduledThreadPool( 2 );  
  // 使用延迟执行风格的方法  
pool.schedule(t2,  1000 , TimeUnit.MILLISECONDS);  

萝卜青菜各有所好,无论什么模式都有他的优点和利用的地方
写了够多了,这些够用了,深入的大家自己研究吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值