发布于2024-11-02 10:23 阅读(857) 评论(0) 点赞(11) 收藏(1)
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能
创建线程池有多种方式,主要通过 Java 的 java.util.concurrent
包提供的 Executors
工具类来实现。以下是几种常见的线程池类型及其区别:
//创建一个固定大小的线程池,模拟提交 10 个任务到线程池。 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class FixedThreadPoolExample { public static void main(String[] args) { ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3); // 创建一个具有3个线程的固定线程池 for (int i = 1; i <= 10; i++) { final int task = i; fixedThreadPool.execute(() -> { System.out.println("执行任务 " + task + ",线程:" + Thread.currentThread().getName()); }); } fixedThreadPool.shutdown(); } }
特点:创建一个固定大小的线程池,池中始终保持指定数量的线程。
适用场景:适用于固定并发数的任务,比如定量的短期并发任务。
优点:能够有效地控制线程数量,避免资源消耗过多。
缺点:如果所有线程都在执行任务,而新的任务不断提交,可能会造成等待队列过长。
//创建一个缓存线程池来处理任务,模拟并发执行 10 个任务 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CachedThreadPoolExample { public static void main(String[] args) { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); for (int i = 1; i <= 10; i++) { final int task = i; cachedThreadPool.execute(() -> { System.out.println("执行任务 " + task + ",线程:" + Thread.currentThread().getName()); }); } cachedThreadPool.shutdown(); } }
//创建一个单线程线程池,顺序执行多个任务。 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class SingleThreadExecutorExample { public static void main(String[] args) { ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor(); for (int i = 1; i <= 5; i++) { final int task = i; singleThreadExecutor.execute(() -> { System.out.println("执行任务 " + task + ",线程:" + Thread.currentThread().getName()); }); } singleThreadExecutor.shutdown(); } }
//创建一个支持定时和周期性执行任务的线程池,示例任务每隔 2 秒执行一次,共执行 3 次。 import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class ScheduledThreadPoolExample { public static void main(String[] args) { ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(2); // 创建一个有2个线程的定时线程池 scheduledThreadPool.scheduleAtFixedRate(() -> { System.out.println("定时任务执行,线程:" + Thread.currentThread().getName()); }, 0, 2, TimeUnit.SECONDS); // 0秒延迟后开始,每隔2秒执行一次任务 // 程序运行5秒后关闭线程池 try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } scheduledThreadPool.shutdown(); } }
//创建一个基于任务分解的线程池来并行执行多个任务,适合处理需要拆分的小任务。 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class WorkStealingPoolExample { public static void main(String[] args) throws InterruptedException { ExecutorService workStealingPool = Executors.newWorkStealingPool(); // 创建默认线程数为CPU核心数的工作窃取线程池 for (int i = 1; i <= 8; i++) { final int task = i; workStealingPool.submit(() -> { System.out.println("执行任务 " + task + ",线程:" + Thread.currentThread().getName()); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } }); } // 让主线程等待子任务执行完成 workStealingPool.awaitTermination(3, TimeUnit.SECONDS); workStealingPool.shutdown(); } }
ForkJoinPool
实现,适用于大任务拆分成小任务的并行处理。线程数默认为处理器核心数。线程池类型 | 线程数量控制 | 特点 | 适用场景 |
---|---|---|---|
FixedThreadPool | 固定数量 | 固定线程数,适合稳定的任务并发 | 固定并发任务 |
CachedThreadPool | 自动扩展 | 动态扩展,空闲线程自动回收,适合任务短小但并发量不稳定 | 短期的异步并发任务 |
SingleThreadExecutor | 单一线程 | 单线程顺序执行任务,保证顺序 | 顺序执行的任务 |
ScheduledThreadPool | 可控核心线程数 | 支持定时或周期性任务 | 定时任务、周期性任务 |
WorkStealingPool | 默认 CPU 核数 | 基于任务拆分并行处理,提高多核 CPU 利用率 | 并行计算和多任务的分解 |
大佬们可以收藏以备不时之需:
Spring Boot 专栏:http://t.csdnimg.cn/peKde
ChatGPT 专栏:http://t.csdnimg.cn/cU0na
Java 专栏:http://t.csdnimg.cn/YUz5e
Go 专栏:http://t.csdnimg.cn/Jfryo
Netty 专栏:http://t.csdnimg.cn/0Mp1H
Redis 专栏:http://t.csdnimg.cn/JuTue
Mysql 专栏:http://t.csdnimg.cn/p1zU9
架构之路 专栏:http://t.csdnimg.cn/bXAPS
博主深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新JAVA全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
这套1T的JAVA学习资料是为真正想在技术道路上突围的人准备的,内容覆盖全面:从各大厂的面试题到1000多个专业简历模板,从就业班到进阶课程,再到架构师实战与全栈高薪课程,帮助你从基础到高阶一步步提升!
无论是找工作还是技能进阶,这份VIP资料都是你不可错过的利器!
部分内容:
如有需要加下方V了解详情,备注:JAVA开发VIP资料。
原文链接:https://blog.csdn.net/jinxinxin1314/article/details/143276342
作者:我很伤感
链接:http://www.javaheidong.com/blog/article/691577/11e2a42aadf9ebfb4e0d/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!