当前位置:首页 > 每日看点

java线程池有哪些?

卡卷网1年前 (2025-01-19)每日看点338

这题我会,java线程池有以下几种:

1. CachedThreadPool

  • 特点:这种线程池会创建一个可缓存的线程池,如果线程池的当前规模超过了处理需求,那么会回收空闲的线程(60秒不执行任务)。当需求增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不对线程池大小做限制,完全依赖于JVM能够创建的最大线程大小。
  • 适用场景:适用于执行很多短期异步任务的程序。
  • 示例

ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); for (int i = 0; i < 10; i++) { final int index = i; try { Thread.sleep(index * 1000); cachedThreadPool.execute(new Runnable() { public void run() { System.out.println(index); } }); } catch (InterruptedException e) { e.printStackTrace(); } }

2. FixedThreadPool

  • 特点:创建一个最大线程数固定的线程池。在任何时候,最多有N个线程会被工作,如果一个线程因为执行异常而结束,那么线程池会补充一个新线程。
  • 适用场景:适用于负载比较重、任务数比较多且线程执行时间较长的场景。
  • 示例

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3); for (int i = 0; i < 10; i++) { final int index = i; fixedThreadPool.execute(new Runnable() { public void run() { try { System.out.println(index); Thread.sleep(index * 1000); } catch (InterruptedException e) { e.printStackTrace(); } } }); }

3. SingleThreadExecutor

  • 特点:只会创建一个线程,所有的任务都会按照任务的提交顺序来执行。如果这个线程异常结束,会新建一个线程继续工作。
  • 适用场景:适用于需要保证一系列相关任务顺序执行的场景。
  • 示例

ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor(); for (int i = 0; i < 10; i++) { final int index = i; singleThreadExecutor.execute(new Runnable() { public void run() { try { System.out.println(index); Thread.sleep(index * 1000); } catch (InterruptedException e) { e.printStackTrace(); } } }); }

4. ScheduledThreadPool

  • 特点:创建一个定时任务线程池,可以调度命令在给定的延迟后运行,或定期执行。
  • 适用场景:适用于需要执行定时任务或周期性任务的场景。
  • 示例

ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5); for (int i = 0; i < 10; i++) { final int index = i; scheduledThreadPool.schedule(new Runnable() { public void run() { System.out.println(index); } }, index * 1000, TimeUnit.MILLISECONDS); }

5. WorkStealingPool

  • 特点:创建一个拥有多个工作线程的线程池,这些工作线程会尝试“窃取”任务来执行。这种线程池可以提高CPU的利用率,适用于多核处理器。
  • 适用场景:适用于任务数量多且任务执行时间较短的场景。
  • 示例

ExecutorService workStealingPool = Executors.newWorkStealingPool(); for (int i = 0; i < 10; i++) { final int index = i; workStealingPool.execute(new Runnable() { public void run() { System.out.println(index); } }); }

6. ForkJoinPool

  • 特点ForkJoinPooljava.util.concurrent包中的一个线程池,用于执行ForkJoinTask任务。它使用了工作窃取算法,可以高效地处理大量小任务。
  • 适用场景:适用于需要递归分解任务的场景,如并行计算。
  • 示例

ForkJoinPool forkJoinPool = new ForkJoinPool(); int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int result = forkJoinPool.invoke(new SumTask(nums, 0, nums.length)); System.out.println(result); // 输出 55

7. 自定义线程池

  • 特点:可以自定义线程池的各种参数,如核心线程数、最大线程数、线程存活时间、任务队列等。
  • 适用场景:适用于需要精细控制线程池行为的场景。
  • 示例

int corePoolSize = 5; int maximumPoolSize = 10; long keepAliveTime = 1; TimeUnit unit = TimeUnit.MINUTES; BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(100); ThreadFactory threadFactory = Executors.defaultThreadFactory(); RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy(); ThreadPoolExecutor customThreadPool = new ThreadPoolExecutor( corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler ); for (int i = 0; i < 10; i++) { final int index = i; customThreadPool.execute(new Runnable() { public void run() { System.out.println(index); } }); }

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/10077.html

分享给朋友:

相关文章

短视频如何快速变现?

短视频如何快速变现?

单人日产200条视频,一晚狂赚上千元,过程却简单到荒唐。 只要你像这只猥琐的海鸥一样,做到这3点就行↓↓ 速度快、不讲武德、不被发现 那做短视频如何做到这3点? 答案是养一只会叼视频的海鸥 不是让你养真的海鸥 而是用 ai 运营方法,类…

苹果为什么不做千元机?

苹果为什么不做千元机?

第一步,打开苹果官网,注意是.com,不是.cn; 第二步,点击iPhone,选择Compare iPhone; 第三步,选择最新iPhone 15系列,查看起售价格,分别为$1199,$999,$799。 这不妥妥的千元机吗,怎么苹果…

为什么有人觉得华为mate60只值2000?

为什么有人觉得华为mate60只值2000?

你以为买Mate60的人真的傻?真的那么爱国? 国庆前,我家那傻子加价800多买了一台Mate60,当时还被我骂他是傻子。 可是他说一回到公司就被老板同事朋友看到,拿去反复查看,都在惊叹他这么快就买到新机。 跟亲戚朋友聚会,别人一看就知道他…

为什么雷军身上没有酒色财气?

武大建校130周年时,雷军向母校个人捐款13亿。 在2023年8月14日晚上七点,雷总在国家会议中心举行的进行第四次年度演讲「成长」: 全篇都在谈成长、梦想,这么多年了,始终做到了知行合一,我相信酒色财气可能真不是他所追求的,一直追求的就像…

在 Kubernetes 中,Service 的实现原理是什么,它是如何实现服务发现的?

行,问的这个问题挺有意思,Kubernetes 里 Service 是怎么实现的,服务发现是怎么回事,咱就直说了。这事儿看起来挺玄乎,但掰开揉碎了讲,也就那么回事。你得把这事儿想得简单点,别一上来就被啥术语吓住了——其实全是些搬砖的套路。…

有哪些好玩到爆的小网站?推荐?

有哪些好玩到爆的小网站?推荐?

1、Poki 免费在线游戏 https://poki.com/zh 免费在线小游戏网站。 上千款在线游戏,完全免费,无需登录,打开就能玩。 2、http://YORG.io https://yorg.io 超耐玩的塔防游戏。搭建自己的防…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。