5种常用的线程池

article/2025/9/14 17:07:02

目录

  • 0 概述
  • 1 newCachedThreadPool(可缓存的线程池)
  • 2 newFixedThreadPool(固定大小的线程池)
  • 3 newScheduledThreadPool(可做任务调度的线程池)
  • 4 newSingleThreadPool(单个线程的线程池)
  • 5 newWorkStealingPool(足够大小的线程池)

0 概述

  1. Java定义了Executor接口并在该接口中定义了execute()用于执行一个线程任务,然后通过ExecutorService接口实现Executor接口并执行具体的线程操作;
  2. ExecutorService接口有多个实现类可用于创建不同的线程池,如表所示是5种常用的线程池;

在这里插入图片描述

1 newCachedThreadPool(可缓存的线程池)

  1. newCachedThreadPool用于创建一个可缓存线程池,之所以叫可缓存线程池,是因为它在创建新线程时如果有可重用的线程,则重用它们,否则创建一个新线程并将其添加到线程池中;
  2. 在线程池的keepAliveTime时间超过默认的60秒后,该线程会被终止并从缓存中移除,因此在没有线程任务运行时,newCachedThreadPool将不会占用系统的线程资源;
  3. 在有执行时间很短的大量任务需要执行的情况下,newCachedThreadPool能很好地复用运行中的线程资源来提高系统的运行效率;

代码

ExecutorService pool = Executors.newCachedThreadPool();

2 newFixedThreadPool(固定大小的线程池)

  1. newFixedThreadPool用于创建一个固定线程数量的线程池;
  2. 如果任务数量大于等于线程池中线程的数量,则新提交的任务将在阻塞队列中排队,直到有可用的线程资源;

代码

ExecutorService pool = Executors.newFixedThreadPool(10);

3 newScheduledThreadPool(可做任务调度的线程池)

newScheduledThreadPool用于创建可定时调度的线程池,可设置在给定延迟时间后执行或定期执行某个线程任务。

代码

public class Test{public static void main(String[] args) {ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);// 创建一个延迟3秒执行的线程pool.schedule(new Runnable() {public void run() {System.out.println("delay 3 seconds" + Thread.currentThread().getName());}}, 3, TimeUnit.SECONDS);// 创建一个延迟3秒且每1秒执行一次的线程pool.scheduleAtFixedRate(new Runnable() {public void run() {System.out.println("delay 3 second and repeat execute every 1 seconds" + Thread.currentThread().getName());}}, 3, 1, TimeUnit.SECONDS);// 关闭线程池
//        pool.shutdown();}
}
delay 3 secondspool-1-thread-1
delay 3 second and repeat execute every 1 secondspool-1-thread-2
delay 3 second and repeat execute every 1 secondspool-1-thread-2
delay 3 second and repeat execute every 1 secondspool-1-thread-2

4 newSingleThreadPool(单个线程的线程池)

  1. newSingleThreadPool创建的线程池会确保池中永远有且只有一个可用的线程;
  2. 在该线程停止或发生异常时,newSingleThreadPool线程池会启动一个新的线程代替该线程继续执行任务;

代码

ExecutorService pool = Executors.newSingleThreadExecutor();

5 newWorkStealingPool(足够大小的线程池)

  1. newWorkStealingPool用于创建持有足够线程的线程池来达到快速运算的目的;
  2. 在内部通过使用多个队列来减少各个线程调度产生的竞争;
  3. 足够的线程指JDK根据当前线程的运行需求向操作系统申请足够的线程,以保障线程的快速执行;

http://chatgpt.dhexx.cn/article/LNoT0Wto.shtml

相关文章

java中的线程池有哪些,分别有什么作用?

阅读完本篇文章会知道如下三点: 1.进程-线程简单介绍 2.java的线程池是什么,有哪些类型,作用分别是什么 3.使用线程池的优点 1.进程-线程的简单介绍 进程 什么是进程呢? 进程是计算机中的程序关于某数据集合的一次运行活动&…

线程池有几种创建方式?

总体来说线程池的创建可以分为以下两类: 通过 ThreadPoolExecutor 手动创建线程池通过 Executors 执行器自动创建线程池。 而以上两类创建线程池的方式,又有 7 种具体实现方法,这 7 种实现方法分别是: Executors.newFixedThre…

创建线程池有哪几种方式

通常开发者都是利用Executors提供的通用线程池创建方法,去创建不同配置的线程池,主要区别在于不同的 Executors目前提供了5种不同的线程池创建配置: 1、newCachedThreadPool(),它是用来处理大量短时间工作…

Java常见的5种线程池

在开发过程中我们常常需要使用到多线程来提高我们代码处理某些任务的效率,最基本的两种创建多线程的方式分别是继承Thread类和实现Runnable接口。但是创建线程和销毁线程的系统开销比较大,而且过多的线程会占用过多的内存等资源。在《阿里巴巴Java开发手…

4种常用线程池介绍

一. 线程池简介 1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执…

面试突击:线程池有几种创建方式?推荐使用哪种?

在 Java 语言中,并发编程都是通过创建线程池来实现的,而线程池的创建方式也有很多种,每种线程池的创建方式都对应了不同的使用场景,总体来说线程池的创建可以分为以下两类: 通过 ThreadPoolExecutor 手动创建线程池。…

线程池的分类(5种)

Java面试高频提问点 问题一:线程池的创建方式 文章目录 Java面试高频提问点前言一、线程池的分类1.newCachedThreadPool2.newFixedThreadPool3.newSingleThreadExecutor4.newScheduleThreadPool5.newSingleThreadScheduledExecutor 总结 前言 近期因为上海疫情原因…

docker搭建pxc

1、设置阿里云加速器 先搭建一个加速器为后面下载镜像做准备 2、下载pxc镜像 docker pull percona/percona-xtradb-cluster:5.7.21 #下载镜像 docker tag percona/percona-xtradb-cluster:5.7.21 pxc #改镜像名 docker rmi percona/percona…

mysql bootstrap pxc_MYSQL PXC

下载ssl101的安装包上传服务器对应安装目录/usr/local 目录。 [rootlocalhost ~]# yum -y install openssl openssl-devel perl-Time-HiRes perl-DBD-MySQL.x86_64 perl-IO-Socket-SSL.noarch [rootpxc2 ~]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm warning: libev-4.15…

mysql pxc集群介绍_PXC集群的概述及搭建

PXC集群的概述及搭建 PXC集群的简介 Percona XtraDB Cluster(下文简称PXC集群)提供了MySQL高可用的一种实现方法。PXC集群以节点组成(推荐至少3节点,便于故障恢复,后面会讨论两节点的情况),每个节点都是基于常规的 MySQL/Percona Server&…

pxc 数据库

一 首先 拉取pxc镜像 docker pull percona/percona-xtradb-cluster 重命名pxc名字 docker tag percona/percona-xtradb-cluster pxc 删除之前的 docker rmi percona/percona-xtradb-cluster 二 创建内部网络 docker network create --subnet172.18.0.0/24 net1 查看net1网…

MySQL_PXC集群_综合应用

MySQL_PXC集群_综合应用 简述部署PXC集群和主从区别综合应用部署PXC集群部署主从复制集群MasterSlave 部署MyCat节点一节点二 部署HAProxy 简述 Percona XtraDB Cluster(简称PXC)是针对MySQL用户的高可用性和扩展性解决方案,基于Percona Ser…

mysql pxc 使用_PXC使用介绍

用户发起Commit,在收到Ok之前 集群每次发起一个动作,都会有一个唯一的编号 PXC独有的Global Trx Id 动作发起者: commit_cb其它节点多了一个动作: apply_cb 上面的这些动作,是通过那个端号交互的?4567 4568端口 IST 只…

docker搭建pxc集群

因为公司需要搭建mysql集群,本来使用原生的mysql镜像搭建了一个简单的主从集群,后来发现使用pxc集群更加方便快捷,而且数据同步性能更强,所以尝试搭建一个pxc集群。 1.pxc介绍 Percona XtraDB Cluster(PXC集群&#…

mysql gtid 还是pxc_PXC中的GTIDs

基本环境:PXC 5.7.19 RowGtid,3节点 一、Galera GTID vs MySQL GTID 1.1、Galera GTID vs MySQL GTID Both kinds of GTIDs are using the same format: . For Galera, is generated when the cluster is bootstrapped. This is shared by all nodes. Fo…

mysql pxc搭建_MySQL(PXC)集群搭建

前言 我这里使用三台CentOS Linux release 7.8.2003的虚拟机来作演示 [rootn1 ~]# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core) 安装前准备 请确保服务器没有安装MySQL,如果已经安装了请先卸载(后面会起冲突) 删除 MariaDB 这里我的服务器版本为…

docker pxc mysql_docker安装pxc集群的详细教程

前言 现在mysql自建集群方案有多种,keepalived、MHA、PXC、MYSQL主备等,但是目前根据自身情况和条件,选择使用pxc的放来进行搭建,最大的好处就是,多主多备,即主从一体,没有同步延时问题&#xf…

mysql pxc gcache_MySQL高可用之PXC

PXC简介 PXC(Percona XtraDB Cluster)是一个开源的MySQL高可用解决方案。他将Percona Server和XtraBackup与Galera库集成,以实现同步多主复制。基于Galera的高可用方案主要有MariaDB Galera Cluster和Percona XtraDB Cluster,目前PXC架构在生产线上用的更…

PXC集群

1.pxc集群 1.1 软件介绍 • Percona XtraDB Cluster(简称PXC) - 是基于Galera的mysql高可用集群解决方案 - Galera Cluster是Codership公司开发的一套免费开源的高可用方案 - PXC集群主要由两部分组成:Percona Server with XtraDB和Write Set Replication patches(同步,多主复制…

mysql bootstrap pxc_Mysql高可用之PXC

一。PXC简介 Percona XtraDB Cluster简称PXC。是一套开源mysql高可用解决方案(XtraDb是mysql被oracle收购之前 开源一个分支 其他分支还有mariadb),Percona Xtradb Cluster的实现是在原mysql代码上通过Galera包将不同的mysql实例(新名称 Percona Server)连接起来&am…