线程池
池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。
线程池的好处:降低资源的消耗,提高响应速度,提高线程的可管理性。
如何创建线程池?
1.通过构造方法实现
2.通过Executor框架的工具类Executors来实现。
线程池原理:我们在代码中模拟了 10 个任务,我们配置的核心线程数为 5 、等待队列容量为 100 ,所以每次只可能存在 5 个任务同时执行,剩下的 5 个任务会被放到等待队列中去。当前的5个任务中如果有任务被执行完了,线程池就会去拿新的任务执行。
线程池在项目中应用的场景:线程池一般用于执行多个不相关联的耗时任务,没有多线程的情况下,任务顺序执行,使用了线程池的话可让多个不相关联的任务同时执行。
如何使用线程池?
1.使用线程池的工厂类Executors里边提供的静态方法newDixedThreadPool生产一个指定线程数量的线程池
2.创建一个类,实现Runnable接口,重写run方法,设置线程任务
3.调用ExecutorService中的方法submit,传递线程任务,开启线程,执行run方法
4.调用ExecutorService中的方法shutdown销毁此线程。
为什么要使用线程池创建多线程?
我们知道不用线程池的话,每个线程都要通过 new Thread(xxRunnable).start()的方 式来创建并运行一个线程,线程少的话这不会是问题,而真实环境可能会开启多个线程让系统和程序达到最佳效率,当线程数达到一定数量就会耗尽系统的 CPU 和 内存资源,也会造成 GC频繁收集和停顿,因为每次创建和销毁一个线程都是要消 耗系统资源的,如果为每个任务都创建线程这无疑是一个很大的性能瓶颈。所以, 线程池中的线程复用极大节省了系统资源,当线程一段时间不再有任务处理时它也会自动销毁,而不会长驻内存。
ThreadPool
优点
-
减少了创建和销毁线程的次数,每个⼯作线程都可以被重复利⽤,可执⾏多个任务
-
可以根据系统的承受能⼒,调整线程池中⼯作线线程的数⽬,防⽌因为因为消耗过多的内存,⽽把服务器累趴下(每个线程需要⼤约
1MB
内存,线程开的越多,消耗的内存也就越⼤,最后死机)-
减少在创建和销毁线程上所花的时间以及系统资源的开销
-
如不使⽤线程池,有可能造成系统创建⼤量线程⽽导致消耗完系统内存
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通