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

java线程池有哪些?

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

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

分享给朋友:

相关文章

现在手里有一万闲钱,买什么币好?

今天是2024年7月29日,看看我的持仓吧。只有几百刀的那些微持仓就不说了,以下持仓都在几千刀~几万刀不等。不构成任何投资建议,成本是多次买入的大致均摊成本$TIA 成本0$DYM 成本0 $SAGA 成本0$STRK 成本0$ETHFI...

你捡过最大的漏是什么?

你捡过最大的漏是什么?

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

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

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

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

在追求家居美学的过程中,如何选择一款电视机,使其既具备出色的音画质又能与家居装饰相得益彰?

在追求家居美学的过程中,如何选择一款电视机,使其既具备出色的音画质又能与家居装饰相得益彰?

先看照片,你就说美不美吧?我家这个40平的客厅东西放得不少,其中最提升观感的是各种灯光,在这么多灯光中,是不是第一眼视觉中心就落在了电视上?没错,因为这电视是非常特别的环景光电视,与显示器的神光同步一样,会随着画面的变化而变化不同的光效,它...

国内AI大模型已近80个,哪个最有前途?

国内AI大模型已近80个,哪个最有前途?

题主说错了,不是80个,是168个!虽然“最有前途”不好说,但是我可以帮题主排除一些错误方向:开源大模型一定比闭源的有前途吗?参数量大的模型一定就比小模型有前途吗?榜单排名高的大模型一定更有前途吗?2024年3月更新,243个大模型中有哪几...

国外有没有像国内闲鱼这样的二手平台?

国外有没有像国内闲鱼这样的二手平台?

在当今全球市场,二手电商正迅速崛起,成为全球消费者购物的热门选择。很多国外的消费者,特别是那些注重可持续和环保的人群,包括富裕的消费者都经常购买二手商品。对电商卖家来说,进军二手平台是个很好的创收机会。尤其是在美国,美国二手物品交易平台eB...

发表评论

访客

看不清,换一张

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