首页 > 其他分享 >ThreadPoolExecutor线程池用法简介

ThreadPoolExecutor线程池用法简介

时间:2023-07-19 16:46:21浏览次数:47  
标签:队列 简介 任务 线程 executor 执行 ThreadPoolExecutor

ThreadPoolExecutor 是 Java 中用于管理线程池的类,它提供了一种方便的方式来执行多线程任务。通过使用线程池,我们可以有效地管理和复用线程,提高程序的性能和资源利用率。

下面是 ThreadPoolExecutor 线程池的详细用法介绍:

  1. 创建线程池对象:

ThreadPoolExecutor executor = new ThreadPoolExecutor(
    corePoolSize,  // 核心线程数,线程池中始终保持活动的线程数
    maximumPoolSize,  // 最大线程数,线程池中允许创建的最大线程数
    keepAliveTime,  // 线程空闲超时时间,超过该时间未执行任务的线程将被回收
    TimeUnit unit,  // 时间单位,如 TimeUnit.SECONDS
    workQueue,  // 任务队列,用于存放待执行的任务
    threadFactory,  // 线程工厂,用于创建新线程
    handler  // 拒绝策略,当线程池无法接受新任务时的处理策略
);

      2. 提交任务给线程池执行:

executor.execute(new Runnable() {
    @Override
    public void run() {
        // 任务执行的代码
    }
});

      3. 关闭线程池:

executor.shutdown();  // 平缓关闭线程池,等待所有任务执行完毕
executor.shutdownNow();  // 立即关闭线程池,尝试中断正在执行的任务

      4. 控制线程池的行为:

    • 核心线程数和最大线程数:通过调整 corePoolSize 和 maximumPoolSize 可以控制线程池的大小,根据任务的特性和系统的资源情况进行合理的配置。
    • 任务队列:workQueue 用于存放待执行的任务,可以选择不同类型的队列,如 ArrayBlockingQueueLinkedBlockingQueueSynchronousQueue 等,根据任务的特点和需求进行选择。
    • 拒绝策略:当线程池无法接受新任务时,可以通过设置合适的拒绝策略来处理。常见的策略有 AbortPolicy(默认策略,抛出异常)、CallerRunsPolicy(调用者执行任务)、DiscardPolicy(丢弃任务)和 DiscardOldestPolicy(丢弃队列中最旧的任务)。

线程池的使用可以提高多线程任务的执行效率和资源利用率,但需要根据具体的业务需求和系统资源进行合理的配置。合理设置线程池的大小、任务队列和拒绝策略,可以避免线程过多或任务堆积导致的性能问题。

 

标签:队列,简介,任务,线程,executor,执行,ThreadPoolExecutor
From: https://www.cnblogs.com/jarsing/p/17566018.html

相关文章

  • 协程与多线程的区别
    多线程和协程处理任务的效率取决于具体的应用场景和实现方式。一般来说,协程比多线程更高效常见比较多线程:优点:多线程可以同时执行多个任务,适用于需要并行执行多个阻塞或计算密集型任务的场景。可以充分利用多核处理器的能力,提高整体的计算性能。......
  • 随笔(二十五)『3个线程交替输出1-100、交替输出ABC』
    1、3个线程交替输出1-100/***需求:*3个线程交替输出1-100*/publicclassTestPrint1_100{privateIntegerstate=1;//状态值1-t1执行,2-t2执行,3-t3执行privateIntegercount=1;//循环次数初始值publicvoidprint1_100(TestPrint1_100pri......
  • JAVA-- 在Java8 Parallel Stream中如何自定义线程池?
    使用ParallelStream时,在适当的环境中,通过适当地使用并行度级别,可以在某些情况下获得性能提升。如果程序创建一个自定义ThreadPool,必须记住调用它的shutdown()方法来避免内存泄漏。ParallelStream默认使用的线程池如下代码示例,ParallelStream并行处理使用的线程池是ForkJoi......
  • java parallelStream 线程堵塞问题笔记
    定义:Stream(流)是JDK8中引入的一种类似与迭代器(Iterator)的单向迭代访问数据的工具。ParallelStream则是并行的流,它通过Fork/Join框架(JSR166y)来拆分任务,加速流的处理过程。最开始接触parallelStream很容易把其当做一个普通的线程池使用,因此也出现了上面提到的开始的时候打标,结束......
  • java协程线程之虚拟线程
    前言众所周知,java是没有协程线程的,在我们如此熟知的jdk1.8时代,大佬们想出来的办法就是异步io,甚至用并行的stream流来实现,高并发也好,缩短事件处理时间也好;大家都在想着自己认为更好的实现方式;在来说说吧,我为什么会在今天研究这个破b玩意儿呢,这事情还的从一个月前的版本维护说......
  • Java高并发之CyclicBarrier简介(转)
    原文:https://juejin.cn/post/7209617649885184058作者:xindoo来源:稀土掘金  Java中的CyclicBarrier是一种同步工具,它可以让多个线程在一个屏障处等待,直到所有线程都到达该屏障处后,才能继续执行。CyclicBarrier可以用于协调多个线程的执行,以便它们可以在某个点上同步执行......
  • PerfView专题 (第十四篇): 洞察那些 C# 代码中的短命线程
    一:背景1.讲故事这篇文章源自于分析一些疑难dump的思考而产生的灵感,在dump分析中经常要寻找的一个答案就是如何找到死亡线程的生前都做了一些什么?参考如下输出:0:001>!tThreadCount:22UnstartedThread:0BackgroundThread:1PendingThread:0DeadThread:......
  • springboot开启jdk虚拟线程
    修改编译参数<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><compilerArgs>--enable-preview</compilerArgs></configura......
  • Coherence 简介
    Coherence是Oracle为了建立一种高可靠和高扩展集群计算的一个关键部件。 典型的使用Coherence的架构图是:Coherence被放在应用服务器和数据库服务器之间,从而解决通常应用架构里的瓶颈(数据瓶颈)来提高整个应用架构的可扩展性。类似如下图: 分布式集群缓存Coherence是一个分......
  • python使一个函数在新线程中运行的装饰器
    python在用tk编程时,界面响应函数最好在另外一个线程中运行,以免界面没有响应.为方便使用,封装了一个装饰器,调用函数时自动在另外一个线程中运行.示例代码如下:importthreadingdefrun_in_thread(func):defwrapper(*args,**kwargs):thread=threading......