newFixedThreadPool(1)和newSingleThreadPool()的区别

2023-05-16

最近在学习线程池遇到一个有意思的问题,在这里记录一下,若大佬们觉得不够精准欢迎留言私信!
查看newSingleThreadPool()源码如下图:
newSingleThreadExecutor源码截图在这里插入图片描述
注释中被圈中的大概意思是指newSingleThreadPool()与newFixedThreadPool(1)的不同,前者线程池中的线程数量是不可重新配置的,也即不能去加入额外的线程。
这具体是指什么意思呢?
接下来我们看一下newFixedThreadPool(1)的源码如下图:
newFixedThreadPool()源码截图在这里插入图片描述
对比两者的源码可以看出newSingleThreadPool的实现相当于在newFixedThreadPool(1)上包装了一个new FinalizableDelegatedExecutorService()。那这个一个步骤主要用来干什么呢?查看其源码:
在这里插入图片描述
可以看出FinalizableDelegatedExecutorService继承自 DelegatedExecutorService,下面给出要讨论的几个service的关系图:
在这里插入图片描述
DelegatedExecutorService中只有线程池的基础操作,不包含比如setCorePoolSize设置核心线程池大小这些方法,所以newSingleThreadPool是没有办法重新配置线程池大小的,但是newFixedThreadPool(1)可以,测试代码如下:


import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * @author ylei1
 * @date 2020-05-28 20:09
 */
public class RunnableDemo implements Runnable {
    public static void main(String[] args) {
        ThreadPoolExecutor fixedThreadPool1 =(ThreadPoolExecutor) Executors.newFixedThreadPool(1);
        //ThreadPoolExecutor singleThreadExecutor =(ThreadPoolExecutor) Executors.newSingleThreadExecutor();
        //singleThreadExecutor.setCorePoolSize(5);
        RunnableDemo demo = new RunnableDemo();
        for (int i = 0; i < 5 ; i++) {
            fixedThreadPool1.submit(demo);
        }
        fixedThreadPool1.shutdown();
        while(true){
            if(fixedThreadPool1.isTerminated()){
                System.out.println("fixedThreadPool1 结束");
                break;
            }
        }
        ThreadPoolExecutor fixedThreadPool3 =(ThreadPoolExecutor) Executors.newFixedThreadPool(1);
        fixedThreadPool3.setCorePoolSize(3);
        for (int i = 0; i < 5 ; i++) {
            fixedThreadPool3.submit(demo);
        }
        fixedThreadPool3.shutdown();
    }
    @Override
    public void run() {
        String threadName = Thread.currentThread().getName();
        System.out.println("子线程"+ threadName +" 开启");
        try {
            Thread.sleep(3000);
        }catch (InterruptedException ex){
            System.out.println(threadName+"异常");
        }finally {
            System.out.println("子线程"+ threadName +" 结束");
        }

    }
}

运行结果如下:
在这里插入图片描述
将代码中newFixedThreadPool换成newSingleThreadExecutor则会报错如下:
在这里插入图片描述
所以也就解释了开头我们源码红框圈中的注释的意思。
以上是个人学习中的一点感悟,如有不实欢迎大佬们留言私信纠正哈

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

newFixedThreadPool(1)和newSingleThreadPool()的区别 的相关文章

  • MacVim永久保存字体设置

    不知道有没有小伙伴 xff0c 跟我一样 很疑惑为什么MacVim中的设置每次重新打开就会重置 每次重新打开我就要设置一下MacVim的字体和字体大小来正常显示我的powerline字体 这样就很麻烦了 xff0c 有没有什么办法可以永久保
  • CentOS 安装vim8 + python3

    前言 CentOS 使用yum 安装的vim版本比较低 xff0c 有一些vim插件都要求vim 8 43 的版本 所以我们还是需要安装一下新版本的 步骤 卸载原来的vim yum remove vim 安装依赖关系 yum install
  • Centos安装nvim并支持python3

    在使用SpaceVim 官方推荐使用neovim xff0c 那咱就安装一个呗 下载安装包 https github com neovim neovim releases latest 我这里下载的是 xff1a 安装 root权限执行以下
  • macOS下vim 中文输入法切换问题和两种解决方案

    vim好用是好用 xff0c 就是跟中文输入法配合的不算太好 有没有什么解决办法呢 xff1f 我今天就尝试解决一下 先上效果 xff1a 方法一 xff1a xkbswitch macosx安装过程 解决恼人的 vim 中文输入法切换问题
  • macOS中vim安装deoplete报错 E605

    https github com Shougo deoplete nvim 错误信息 vim hug neovim rpc Vim pythonx ModuleNotFoundError No module named neovim 处理
  • 使用pip命令都会显示AttributeError: type object 'Callable' has no attribute '_abc_registry'错误?

    问题 xff1a 使用pip命令都会显示AttributeError type object 39 Callable 39 has no attribute 39 abc registry 39 错误 xff1f 不知道什么鬼 xff01
  • [vimproc].SpaceVim/bundle/v...4.so“ is not found:help vimproc and make it.

    项目场景 xff1a 项目Value操作系统1CentOS7操作系统2macOS Big Sur 11 2NeoVimNVIM v0 4 4SpaceVim1 7 0 dev 我在CentOS7和macOS上都遇到这个问题了 xff0c 最
  • CentOS 7安装 CMake

    下载CMake 访问https cmake org download span class token function wget span https cmake org files v3 12 cmake 3 12 3 tar gz C
  • vim安装插件实现Java代码格式化

    最近迷上了使用vim开发java代码 已经使用了一段时间了 xff0c 平时自己写代码时会手动调整格式 xff0c 代码自动格式化一直没有使用过 如果频繁copy代码 xff0c 代码格式化还是很有必要的 这里要感谢一下SpaceVim 不
  • SpaceVim踩坑之java代码格式化

    个人理解 xff1a SpaceVim是一套不错的vim插件集合 也是因为有SpaceVim才让我入门vim xff0c 爱上vim 一直想实现ssh远程服务做开发调试这件事情 xff0c SpaceVim让我看到了这个想法的可行性 实践的
  • 从零开始vim搭建Java开发环境[视频]

    视频教程 从零开始vim搭建Java开发环境 全屏观看 前言 起初我仅仅是想在手机上搭建一套能开发Java的vim环境 玩转手机中的linux系统termux并搭建java开发环境 玩着玩着发现vim真香 xff01 不仅能搭建简单的Jav
  • CentOS7更改成阿里云的源

    span class token comment 备份本地yum源文件 span span class token function mv span etc yum repos d CentOS Base repo etc yum repo
  • 手机变身蓝牙键盘、鼠标Serverless Bluetooth Keyboard & Mouse for PC/Phone

    前言 看过我前面的文章的小伙伴 xff0c 应该知道我最近在使用手机在地铁里写代码 玩转手机中的linux系统termux并搭建java开发环境 手机写代码有两个缺点 xff1a 屏幕小输入慢 因为手机的便携这个优化 xff0c 第一个缺点
  • SQLcl使用vim编辑sql

    前言 有时通过ssh远程运维 xff0c 使用SQLcl做简单的查询和调试很方便 简单实用 但是使用习惯了各种语法高度就会显的有些单调 那么能不能使用vim来做sql脚本的编写呢 xff1f 那就来探究一下吧 探究过程 我简单的百度了一下
  • 解决iTerm全屏顶部白条闪烁

    环境 操作系统 xff1a macOS Big Sur 11 2 iTerm2 xff1a Build 3 4 4 现象 在iTerm全屏的时候 xff0c 顶部不定时会出现一个闪烁的白条 据了解这个可能是Big Sur的BUG 这个问题困
  • CentOS7 安装nodejs

    参考文档 https linuxize com post how to install node js on centos 7 安装过程 安装过程需要root权限 xff0c 或者有sudo特权的用户 1 添加NodeSource yum存
  • Spring框架的简单配置

    1 xff0c Spring框架是由于软件开发的复杂性而创建的 Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情 然而 xff0c Spring的用途不仅仅限于服务器端的开发 从简单性 可测试性和松耦合性角度而言
  • neovim as JavaScript IDE

    我的安装环境是CentOS7 43 Neovim xff0c 其他的环境应该类似 xff0c 供参考 安装node CentOS7 安装nodejs https blog csdn net lxyoucan article details
  • Termux字体大小调整

    Termux默认字体偏小 xff0c 自己看着还行 因为有时我会用手机录视频 xff0c 发给别人看的时候 xff0c 字太小就看的不太清楚了 我本以为调整字体大小很麻烦 xff0c 需要修改什么配置文件 xff0c 看来是我思多了 只需要

随机推荐

  • archlinux安装Oracle Instant Client

    下载 https www oracle com database technologies instant client linux x86 64 downloads html 我下载的是 具体版本根据各人需要下载 下载以后解压 xff0c
  • OmniDB浏览器中的SQL Client

    简介 运行在网页中的sql client 支持多种数据库连接 现在一些客户现场非常注重网络安全了 xff0c 数据库仅对指定机器开放 xff0c 对我们远程支持带来了不少困扰 比如 xff1a 我们操作oracle xff0c 只能远程使用
  • iterm2 Base64方式文件下载

    使用iterm2 连接远程SSH时 xff0c 有时有一些小文件 xff08 比如 xff1a 配置文件 xff0c 图片素材之类 xff09 需要下载 xff0c 如果专门找个sftp软件下载感觉又太麻烦了 这时可以使用iterm提供的B
  • archlinux 定时任务

    Crontab 格式 crontab 的基本格式是 xff1a 分 时 日 月 星期 命令 分 值从 0 到 59 时 值从 0 到 23 日 值从 1 到 31 月 值从 1 到 12 星期 值从 0 到 6 0 代表星期日 执行的命令
  • archlinux使用docker运行mysql实例

    wiki https wiki archlinux org index php Docker pacman安装docker 安装docker span class token function sudo span pacman S dock
  • macOS中安装secoclient

    前言 有小伙伴在我的文章下评论提到macOS版本安装secoclient遇到问题了 xff0c 为了回答这个问题我当然开个文章说明一下吧 原文章传送门 xff1a secoclient全版本下载分享 xff1a https blog csd
  • Spring boot磁盘文件下载

    代码实现 span class token keyword import span org span class token punctuation span springframework span class token punctua
  • macOS中iTerm或终端字体乱码解决办法

    解决乱码 如果你发现你显示的不是像我截图里的那样的 xff0c 而是有乱码 xff1f 之类的 那是因为字体的原因 只要安装nerd font字体 xff0c 并设置终端模拟器的字体为nerd font 以macOS为例 使用Homebre
  • onClickListener重写onClick方法的简写形式(v)-> Lambda表达式

    最基础的点击事件的写法 view setOnClickListener span class token punctuation span new View span class token function name function O
  • CentOS安装Ranger

    文章目录 一键安装安装pip3安装python3与python3 devel设置国内的源临时切换源永久切换源 安装ranger参考 一键安装 直接复制下面命令即可完成安装了 yum span class token function ins
  • IntelliJ IDEA自定义代码段

    前言 IntelliJ IDEA的代码段能提高不少开发效率 xff0c 除了使用默认的代码段 xff0c 那么如何自定义代码段呢 xff1f 操作演示 自定义代码段 Preferences Editor gt Live Templates
  • Centos7如何安装nginx新版本

    前言 应该有不少小伙伴安装nginx使用下面命令安装的吧 xff1f yum span class token function install span epel release yum span class token function
  • CentOS7设置时区与时间同步

    文章目录 一键脚本设置时区根据网络同步时间手动设置时间参考 一键脚本 直接整段复制粘贴到命令即可 span class token comment 设置时区为上海 span timedatectl set timezone Asia Sha
  • CentOS中使用brew安装新软件

    因为CentOS为了追求系统稳定 自带的软件管理器安装的软件相对会比较旧 软件比较旧有它的好 也有不好的地方 比如 yum安装vim目前最新的版本也只是7 4 现在很多插件都要求vim 8以上版本了 这时只能自己源码编译安装vim就很麻烦
  • CentOS安装最新版本curl

    CentOS系统自带的curl版本 xff1a span class token function curl span version span class token function curl span 7 29 0 span clas
  • CentOS中使用Homebrew报错ELF: x: Error

    报错信息如下 apex localhost hello hello P k ELF x Error 1484067991 原因分析 Homebrew安装的gcc 和 glibc 与系统自带的库冲突了 解决办法 brew uninstall
  • CentOS7升级gcc-10.3.0

    因为Centos中使用yum安装软件版本一般比较旧 最近在研究在Centos使用brew安装新版软件 CentOS自带的gcc版本比较老旧了 使用brew安装的软件小部分打开会报错 所以尝试升级一下gcc看看是否能解决问题 注意 GCC是L
  • Centos6.8更新curl7.76

    我想在CentOS6 8中安装linuxbrew xff0c curl版本过低 xff0c 只好升级一下了 安装依赖项软件包 xff08 后续升级需要 xff09 yum span class token function install
  • CentOS6.8安装python3+ranger

    个人比较喜欢使用ranger做文件管理器用 xff0c 需要python3支持 CentOS6 8无法直接使用yum安装python3 xff0c 那我们就编译安装吧 xff01 准备工作 依赖 yum span class token f
  • newFixedThreadPool(1)和newSingleThreadPool()的区别

    最近在学习线程池遇到一个有意思的问题 xff0c 在这里记录一下 xff0c 若大佬们觉得不够精准欢迎留言私信 xff01 查看newSingleThreadPool 源码如下图 xff1a 注释中被圈中的大概意思是指newSingleTh