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

java线程池有哪些?

卡卷网10个月前 (01-19)每日看点206

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

分享给朋友:

相关文章

一条音频千万播放!喜马拉雅如何成为亿万女性用户的情感树洞?

一条音频千万播放!喜马拉雅如何成为亿万女性用户的情感树洞?

哪个时刻你觉得自己很孤独,是母胎单身20余年渴望被陪伴,是因为身材焦虑渴望被接受,是走在创业独木桥上渴望被支持,还是困在产后抑郁中渴望被理解? 女性的情感倾诉需求越来越被...

你手机里有哪些堪称神器的 App?

你手机里有哪些堪称神器的 App?

嗨嗨,我是赢酱~首先我认为对于我们有用的提升自我的都是手机里的神器 App。 一个人应该什么样子呢?在我从女孩子的角度看来,自律,上进,会打扮,情商高,会挣钱,独立,落落大方,这才是应该有的样子,我们可以借助手机不断学习改变今天给大家准备的...

我爸讽刺我,写个破代码一年才十几万,他在工地带50个人,让我回去跟他干,写代码没出路,我该怎么选择?

我跟你一样的情况,本人现身说法,千万不要跟你爸干,我就是反面教材,现在想回去都回不去了,快十年没写代码了,再就是岁数大了,38岁了,35岁以上的码农根本就没公司愿意要,而且会受歧视。工程不好干,首先就是不合法,在法律层面,根本就没有包工头的...

都是前端框架,为什么用 React 的人会有优越感?

都是前端框架,为什么用 React 的人会有优越感?

上家公司一直搞react,最近第一次写个vue3项目。老板朋友来了看了下页面说:这用vue写的吧。我:是...老板朋友:一看就知道是vue做的。这tm你看一眼页面就知道用的啥框架?这感觉就是,我一直用苹果,偶尔用了下华为打电话,有个人离老远...

无意中发现技术主管写的代码,大家帮忙看看什么水平?

无意中发现技术主管写的代码,大家帮忙看看什么水平?

虽然很多答主用了诸如“典范级”、“心旷神怡” 的形容, 赞美这段代码, 但这里, 出于技术讨论的动机, 我说说不同看法.栈, 如果善于利用栈来处理树结构, 那么可以写出更简洁的代码, 根本不需要 recuresiveFn 这种方法. 泛型,...

华为纯血鸿蒙,从此天下三分了吗?

华为纯血鸿蒙,从此天下三分了吗?

万众期待的纯血版 HarmonyOS NEXT 终于是端上来了,主打一个自研,从里到外,从内核到架构,都是自研。用户的激情已经被点燃,可见大家对于纯血鸿蒙的期待,但是鸿蒙系统能不能真正与安卓、iOS三分天下呢?目前来说,还为时过早。iOS和...

发表评论

访客

看不清,换一张

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