首页 > 编程语言 >Java线程池分类简单列举

Java线程池分类简单列举

时间:2024-06-05 18:02:13浏览次数:26  
标签:Java 队列 阻塞 任务 线程 列举 new 执行

一、Java 四种线程池

Java通过Executors提供四种线程池,分别为
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

newFixedThreadPool  创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

newScheduledThreadPool 创建一个可定期或者延时执行任务的定长线程池,支持定时及周期性任务执行。 

newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 

线程关键方法

submit(),提交一个线程任务,可以接受回调函数的返回值吗,适用于需要处理返回着或者异常的业务场景
execute(),执行一个任务,没有返回值
shutdown(),表示不再接受新任务,但不会强行终止已经提交或者正在执行中的任务
shutdownNow(),对于尚未执行的任务全部取消,正在执行的任务全部发出interrupt(),停止执行


二、核心类及其参数

四种线程池本质都是由 Executors(线程接口)创建不同的线程池,返回 ExecutorService 对象,各线程池均实现 ExecutorService 接口。
构造参数如下 :
int corePoolSize, 核心线程大小

int maximumPoolSize,最大线程大小

long keepAliveTime, 线程存活时间(超过corePoolSize的线程多久不活动被销毁时间)

TimeUnit unit,时间单位

BlockingQueue<Runnable> workQueue 任务队列

ThreadFactory threadFactory 线程池工厂

RejectedExecutionHandler handler 拒绝策略

三、线程可用阻塞队列

ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列

LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列(常用)

PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列

DelayQueue: 一个使用优先级队列实现的无界阻塞队列

SynchronousQueue: 一个不存储元素的阻塞队列(常用)

LinkedTransferQueue: 一个由链表结构组成的无界阻塞队列

LinkedBlockingDeque: 一个由链表结构组成的双向阻塞队列

四、四种线程源码

各池源码(示例):
public static ExecutorService newSingleThreadExecutor() {
   
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
}

 public static ExecutorService newCachedThreadPool() {
   
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
}
public static ExecutorService newFixedThreadPool(int nThreads) {
   
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
}

//创建一个定长线程池,支持定时及周期性任务执行。延迟执行
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue) {
   
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             Executors.defaultThreadFactory(), defaultHandler)

标签:Java,队列,阻塞,任务,线程,列举,new,执行
From: https://blog.csdn.net/MircoO/article/details/139474244

相关文章

  • 线程池的拒绝策略(Java)
    java线程池的拒绝策略Java中的线程池拒绝策略定义了当任务无法执行时如何处理这些任务。以下是Java中常见的拒绝策略:一、CallerRunsPolicy#:当任务被拒绝添加时,如果调用者所在的线程不是线程池中的线程,那么任务将由该调用者所在的线程直接执行。ExecutorServiceexecutor......
  • Java环境配置(超详细)
    Java环境配置(超详细)引言1、安装JDK1.1、下载安装JDK1.2、配置环境变量:JAVA_HOME1.3、将JAVA_HOME添加到Path中2、安装Maven2.1、下载安装Maven2.2、配置maven的环境变量:M2_HOME2.3、将Maven变量添加到Path中引言Java开发环境的配置主要是安装JDK和Maven。1、......
  • Java1.8语言+ springboot +mysql + Thymeleaf 全套家政上门服务平台app小程序源码
    Java1.8语言+springboot+mysql +Thymeleaf 全套家政上门服务平台app小程序源码家政系统是一套可以提供上门家政、上门维修、上门洗车、上门搬家等服务为一体的家政平台解决方案。它能够与微信对接、拥有用户端小程序,并提供师傅端app,可以帮助创业者在不需要相关技术人员及......
  • 【Go-多线程】Golang的channel实现消息的批量处理
    【Go-多线程】Golang的channel实现消息的批量处理。当消息量特别大时,使用kafka之类的messagequeue是首选,但这是更加轻量的方案channelx.go//这个方案需要实现以下几点://1.消息聚合后处理(最大条数为BatchSize),核心://(1)带buffer的channel相当于一个FIFO的队列//(2)多个常驻的gorou......
  • JavaScript-匿名函数
    原文链接:https://blog.csdn.net/weixin_45203607/article/details/124227504什么是匿名函数1、匿名函数,即没有名称的函数2、如果单独只写一个匿名函数,此时是不符合语法要求的会报错。需要给匿名函数包裹一个括号,使之成为表达式。3、被小括号包裹的内容会被js识别为一个函数表......
  • 每天坚持写java锻炼能力---第一天(6.4)
    今天的目标是菜单:B站/马士兵的项目菜单packagejava1;importjava.util.Scanner;publicclassTest{publicstaticvoidmain(String[]args){while(true){//3.加入死循环,让输入一直有System.out.println();System.out.print......
  • zookeeper:Unexpected exception, exiting abnormally ::java.io.EOFException
    转载请注明出处:服务器中断,重启服务器在重启kafka服务时,遇到如下报错:2024-06-0513:52:56,251[myid:]-ERROR[main:ZooKeeperServerMain@64]-Unexpectedexception,exitingabnormallyjava.io.EOFExceptionatjava.io.DataInputStream.readInt(DataInputStream.j......
  • javaScript高级23_事件4
    一、概念某些组件被执行了某些操作后,触发某些代码的执行。事件:某些操作。如:单击,双击,键盘按下了,鼠标移动了事件源:组件。如:按钮文本输入框...监听器:代码。注册监听:将事件,事件源,监听器结合在一起。当事件源上发生了某个事件,则触发执行某个监听器代码。二、常见的事件......
  • Redis——Java的客户端
    Java的客户端在Redis官网中提供了各种语言的客户端,地址:https://redis.io/clientsjedisjedis的官网地址:https://github.com/redis/jedis1.引入依赖<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.0......
  • Java—集合框架、时间和空间复杂度
    一、集合框架Java集合框架(JavaCollectionFramework),又称为容器(container),是定义在java.util包下的一组接口(interfaces)和其实现类(classes)其主要表现为将多个元素(element)置于一个单元中,用于对这些元素进行快速、便捷的存储(store)、检索(retrieve)、管理(manipulate......