当前位置:首页 > 每日看点 > 正文内容

java线程池有哪些?

卡卷网11个月前 (01-19)每日看点236

这题我会,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

分享给朋友:

相关文章

B 站上有哪些很好的学习资源?

B 站上有哪些很好的学习资源?

前!方!高!能!精选了多位学习Up主,不乏百万粉丝的大V,还有超多珍贵的学习资源推荐。进了小破站,完全不用担心学完了该怎么办?因为根本学不完啊!!!B站的学习干货实在太多了!语言学习葉子先生酱https://space.bilibili.c...

开发了个小程序,咋推广呢?

要是开发了个小程序,想推广的话,可以先从自己的朋友圈子下手,让亲戚朋友都帮忙转发宣传,这样能先有点人气。然后去一些跟你的小程序相关的论坛、社区啥的,发帖子介绍介绍,吸引有兴趣的人。还能找些网红、博主合作,要是他们觉得你的小程序不错,帮忙推荐...

是什么让你抛弃了 Windows 而转向 Mac?

是什么让你抛弃了 Windows 而转向 Mac?

别的不说,这玩意儿是真抗造啊,我这2012年买的MacBook Pro,依然在用……这台电脑我博士最后两年用来写代码(只写不运行,运行要上集群)和写论文,工作之后就变成生活和娱乐了,因为我一直用架子和外接键盘(颈椎不好)所以电脑看起来很新,...

你是如何在不依靠工资收入的情况下赚到一万元的?

你是如何在不依靠工资收入的情况下赚到一万元的?

分享几个路子稳,门槛低,变现快,适合年轻人的靠谱的副业。绝对不是送外卖、滴滴、搬砖等等的苦力活,这几个副业都是能是性价比极高,还能让你快速成长的工作。想通过副业实现暴富、立马月入过万的同学,建议速速划走。今天撇哥就给大家分享100+个靠谱赚...

你捡过最大的漏是什么?

你捡过最大的漏是什么?

买了套二手房,软磨硬泡便宜了1个w 结果就是一屋子狼藉 原业主说反正你们要重新装修 就不收拾了 等完了你们一起收拾掉吧 落了很多柜子 电器是啥的 今天打开卧室柜子一看…现在是去存钱的路上有朋友知道这样存钱银行会给发大米跟油吗...

闲鱼上为什么会有人问都不问直接下单?

我去年卖一个荣耀90,挂的2200,最终成交2137.5元。对方是一个高高壮壮的西北口音,要求的自取。大概我吃过午饭,约了旁边的商场,那里有荣耀售后。见了面,先看了手机,试了好一会儿,各种测试,没问题。然后去了商场二楼的荣耀售后,让人家售后...

发表评论

访客

看不清,换一张

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