JavaEE初阶--线程池

目录

一、引言

二、线程池的意义

三、线程池的参数介绍

         四、Executors创建线程池的几种方式

         五、线程池的实现

         六、总结


一、引言

  线程池是多线程学习中一个十分重要的点,本篇博客,作者会给大家介绍以下线程池的意义,线程池的参数介绍,线程池的工作流程,使用Executors创建常见的线程池。

二、线程池的意义

  1.降低资源消耗:减少线程的创建和销毁的性能开销。

  我们可以将已经创建的线程放入线程池中,这样在之后我们需要利用该线程时,可以不用再次创建,这样减少了线程的创建和销毁的性能开销。

  2.提高响应速度:当任务来时可以直接使用,不用等待线程创建。

  3.可管理性:进行统一的分配,监控,避免大量的线程间因互相抢占系统资源导致的阻塞现象。

  利用线程池,可以进行任务的分配即现在哪个线程工作,这样避免了线程的抢占,而出现阻塞的现象。

三、线程池的参数介绍

  

上述图片中,辞退的意思就是是否会被销毁,corePoolSize就不会被销毁。

四、Executors创建线程池的几种方式

1.newFixedThreadPool:创建固定线程数的线程池

2.newCachedThreadPool:创建线程数目动态增长的线程池

3.newSingleThreadExecutor:创建只包含单个线程的线程池

4.newScheduledThreadPool:设定延迟时间后执行命令,或者定期执行命令,是进阶版的Timer。

Executors本质上是ThreadPoolExecutor类的封装。

五、线程池的实现

核心操作是submit,将任务加入到线程池中

使用Worker类来描述一个工作线程,使用Runnbale描述一个任务

使用一个BlockingQueue组织所有的任务

每个Worker线程要做的事:不停地从BlockingQueue中取任务并执行

指定以下线程池中最大线程数maxCountWorker,当线程数超过这个最大值的时候,就不再新增线程了。

public class Demo34 {
    public static void main(String[] args) {
        // 创建一个最普通的线程池.
        // 能够根据任务的数目, 自动进行线程扩容.
        // ExecutorService service = Executors.newCachedThreadPool();

        ExecutorService service= Executors.newFixedThreadPool(10);

        for(int i=0;i<10000;i++){
            int id=1;
            service.submit(new Runnable() {
                @Override
                public void run() {
                    System.out.println("hello "+id+","+Thread.currentThread().getName());
                }
            });
        }
  }
}

六、总结

本篇文章简单地介绍了一下线程池的意义,线程池的创建方式以及实现代码,大家如果对线程池感兴趣还可以自己在IDEA中看线程池的原码。欢迎在评论区讨论,最后,感谢大家观看!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值