JUC系列(六)线程池
- 手机
- 2025-08-21 10:24:01

📣 📣 📣 📢📢📢 ☀️☀️你好啊!小伙伴,我是小冷。是一个兴趣驱动自学练习两年半的的Java工程师。 📒 一位十分喜欢将知识分享出来的Java博主⭐️⭐️⭐️,擅长使用Java技术开发web项目和工具 📒 文章内容丰富:覆盖大部分java必学技术栈,前端,计算机基础,容器等方面的文章 📒 如果你也对Java感兴趣,关注小冷吧,一起探索Java技术的生态与进步,一起讨论Java技术的使用与学习 ✏️高质量技术专栏专栏链接: 微服务,数据结构,netty,单点登录,SSM ,SpringCloudAlibaba等 😝公众号😝 : 想全栈的小冷,分享一些技术上的文章,以及解决问题的经验 ⏩当前专栏:JUC系列
线程池池化技术、
程序的运行 本质: 占用系统的资源 ! 优化资源的使用 =>池化技术
线程池,连接池,内存吃,对象池, 频繁的创建销毁 十分的浪费资源
线程池的好处:
降低资源的消耗提高响应的速度方面管理线程的复用 可以控制最大并发数量,管理线程
三大方法下图来自 阿里巴巴开发规约手册
代码实例
public class poolDemo { public static void main(String[] args) { //单个线程 ExecutorService Threadpool = Executors.newSingleThreadExecutor(); // 创建一个固定的线程池大小 //ExecutorService Threadpool = Executors.newFixedThreadPool(5); //可以伸缩的 遇强则强 // ExecutorService Threadpool = Executors.newCachedThreadPool(); try { for (int i = 0; i < 10; i++) { Threadpool.execute(() -> { System.out.println(Thread.currentThread().getName() + "=> ok"); }); } } catch (Exception e) { e.printStackTrace(); } finally { //线程池使用完毕 一定要关闭 Threadpool.shutdown(); } } }三大方法的创建代码
public static ExecutorService newSingleThreadExecutor() { return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>())); } public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); } public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); } 七大参数七大参数
public ThreadPoolExecutor(int corePoolSize, //核心线程池大小 int maximumPoolSize,// 最大核心线程数大小 long keepAliveTime,// 超时了没有人调用就会释放 TimeUnit unit,// 超时单位 BlockingQueue<Runnable> workQueue,// 阻塞队列 ThreadFactory threadFactory, // 线程工厂,创建线程的 RejectedExecutionHandler handler// 拒绝策略 )这七个参数分别有什么作用呢,思路图
手动创建线程池,不用封装好的方法,使用原生的线程池方法
ThreadPoolExecutor threadpool = new ThreadPoolExecutor( 2, 5, 3, TimeUnit.SECONDS, new LinkedBlockingDeque<>(3), Executors.defaultThreadFactory(), // 这个时候 举例子,银行的人满了 这种方式就是 不处理 抛出异常 new ThreadPoolExecutor.AbortPolicy() ); 线程池四种拒绝策略new ThreadPoolExecutor.AbortPolicy() 银行的人满了 这种方式就是 不处理 抛出异常
执行效果
new ThreadPoolExecutor.CallerRunsPolicy() 银行人满了,哪里来的去哪里,回到调用线程输出,不会异常
执行结果
new ThreadPoolExecutor.DiscardPolicy() 队列满了 就抛出全部任务,
执行结果
new ThreadPoolExecutor.DiscardOldestPolicy() 尝试和最早的线程竞争 查看是否有位置,没有就抛出任务
执行结果
代码实例
public class poolDemo { public static void main(String[] args) { ThreadPoolExecutor threadpool = new ThreadPoolExecutor( 2, 5, 3, TimeUnit.SECONDS, new LinkedBlockingDeque<>(3), Executors.defaultThreadFactory(), new ThreadPoolExecutor.DiscardOldestPolicy() ); //单个线程 //ExecutorService Threadpool = Executors.newSingleThreadExecutor(); // 创建一个固定的线程池大小 //ExecutorService Threadpool = Executors.newFixedThreadPool(5); //可以伸缩的 遇强则强 // ExecutorService Threadpool = Executors.newCachedThreadPool(); try { //最大承载如何计算 : 阻塞队列+max数量 //超过的话就会 爆出异常 :RejectedExecutionException for (int i = 1; i <= 15; i++) { threadpool.execute(() -> { System.out.println(Thread.currentThread().getName() + "=> ok"); }); } } catch (Exception e) { e.printStackTrace(); } finally { //线程池使用完毕 一定要关闭 threadpool.shutdown(); } } } 最大负载CPU密集型 有几个核心就定义几个,可以保证效率最高
Runtime.getRuntime().availableProcessors() //获取cpu 核心数IO 密集型 判断程序中 十分消耗IO资源的线程,如: 程序 有 15个大型任务,io 十分占中资源,那么设定的比任务数量大 就可以保证一定性能、
JUC系列(六)线程池由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“JUC系列(六)线程池”