1.2 SingleThreadExecutor

2023-05-16

线程池工具类给我们提供了一些常见的线程池,这篇来谈一谈SingleThreadExecutor线程池

使用方式

创建方式比较简单,直接使用工具创建就ok,Executors.newSingleThreadExecutor()

源码

/**
     * Creates an Executor that uses a single worker thread operating
     * off an unbounded queue. (Note however that if this single
     * thread terminates due to a failure during execution prior to
     * shutdown, a new one will take its place if needed to execute
     * subsequent tasks.)  Tasks are guaranteed to execute
     * sequentially, and no more than one task will be active at any
     * given time. Unlike the otherwise equivalent
     * {@code newFixedThreadPool(1)} the returned executor is
     * guaranteed not to be reconfigurable to use additional threads.
     *
     * @return the newly created single-threaded Executor
     */
    public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }

剖析

  1. 从源码中可以看到,核心线程数和最大线程数都是1,当没有空闲的线程时,那么任务将会直接丢入队列中
  2. 看来看一下使用了LinkedBlockingQueue队列,LinkedBlockingQueue我们都知道他是一个无界队列,也就是说这个队列可以无限制的存储任务。
  3. 因为核心线程数和最大线程数都是1,所有存活时间在这里没有意义

缺点

因为使用了无界队列,那么任务可以无限制的放入队列中,这样做有OOM的风险。
当运行这段代码的时候最好设置一下 -Xms300m -Xmx300m

codeing

package pres.bik.lean.concurrent;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author yangkaifei
 * @version 1.0
 * @date 2021/11/28 7:00 下午
 */
public class SingleThreadExecutorLean {
    /**
     * 线程池
     */
    private static final ExecutorService EXECUTOR_SERVICE = Executors.newSingleThreadExecutor();

    public static void main(String[] args) {
        while (true) {
            EXECUTOR_SERVICE.execute(new Thread(() -> {
                System.out.println("任务开始执行");
                try {
                    Thread.sleep(1000000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }));
        }
    }
}

运行结果:

任务开始执行
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
	at java.util.concurrent.LinkedBlockingQueue.offer(LinkedBlockingQueue.java:416)
	at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1371)
	at java.util.concurrent.Executors$DelegatedExecutorService.execute(Executors.java:668)
	at pres.bik.lean.concurrent.SingleThreadExecutorLean.main(SingleThreadExecutorLean.java:19)

可以看到刚开始执行了1个任务(因为线程数是1),之后的所有任务都被丢到了这个无界的任务队列中,又因为没有空闲的线程,所有的任务都积压到了队列里,最终会抛OOM

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

1.2 SingleThreadExecutor 的相关文章

  • 【综述】NLP 对抗训练(FGM、PGD、FreeAT、YOPO、FreeLB、SMART)

    在对抗训练中关键的是需要找到对抗样本 xff0c 通常是对原始的输入添加一定的扰动来构造 xff0c 然后放给模型训练 xff0c 这样模型就有了识别对抗样本的能力 其中的关键技术在于如果构造扰动 xff0c 使得模型在不同的攻击样本中均能
  • linux命令之常用shell命令

    四 常用的命令 1 高亮制表符 t set hls 2 将文本中的某些值替换为另一个值 xff0c 如将 utf转为 txt xff1a s utf txt g 3 linux 转码 xff1a xff08 1 xff09 转码单个文件 x
  • LeetCode 658. 找到 K 个最接近的元素

    题目描述 658 找到 K 个最接近的元素 解法 双指针 xff0c 既然数组已经排序好了 xff0c 那么按照 x 就可以分两半边 xff0c 两边各记录一个指针 xff0c 分别比较着远离 x span class token keyw
  • LeetCode 662. 二叉树最大宽度

    题目描述 662 二叉树最大宽度 解法 这道题画个图就清楚很多了 xff0c 先理解一下为什么我们要编号 如果这道题让你用层遍历会怎么做 xff0c 即使是空指针的结点也应该记为 1 这样的一个元素压入到队列中 xff0c 然后统计每层的宽
  • LeetCode 946. 验证栈序列

    题目描述 946 验证栈序列 解法 将 pushed 中的元素入栈 xff0c 同时判断 xff0c 栈顶元素是否等于 poped j xff0c 如果是则元素出栈 xff0c j 记录 poped 中的元素到哪里了 当所有元素处理完后 x
  • 违背基本假设的几种情况——异方差性(R语言)

    在建立实际问题的回归模型时 xff0c 经常存在于此假设想违背的情况 xff0c 一种是计量经济模型中常说的异方差性 xff0c 即 v a r i
  • 逐步回归(R语言)

    R软件提供了非常方便地进行逐步回归分析的计算函数step 它是以AIC信息统计量为准则 xff0c 通过选择最小的AIC信息统计量 来达到提出或添加变量的目的 1 前进法 代码实现如下 xff1a data3 1 lt read csv 3
  • 多重共线性的诊断(R语言)

    多重共线性的诊断 1 方差扩大因子法 经验表明 xff0c V I F j 10 VIF j geq10
  • 岭回归(R语言)

    代码实现如下 xff1a data3 3 lt read csv 34 C Users Administrator Desktop data3 3 csv 34 head 61 TRUE datas lt data frame scale
  • Logistic回归模型(R语言)

    1 分组数据的Logistic回归模型 下面我们以一道例题来说明 xff0c R软件中实现分组数据的logistics回归模型 xff1a 代码实现如下 xff1a data10 4 lt read csv 34 C Users Admin
  • Eigen库使用指南(转载)

    Eigen库使用指南 转载 目录 Eigen库使用指南 转载 1 模块和头文件 2 Matrix类 3 矩阵与向量的运算 4 Array类 5 块操作 6 矩阵初始化 7 归约 xff0c 迭代器 xff0c 广播 8 Map类 9 混淆问
  • MAVEN SpringMVC IDEA里 修改js、html需要重启才会生效

    目的 xff1a 修改js html时可以立即生效 1 将tomcat服务配置中的before launch中的数据清空 2 修改如图 3 勾选File Settings Compiler 4 快捷键 Ctrl 43 Alt 43 Shif
  • linux命令之数据库操作

    五 数据库操作 1 mysql 重新启动 sudo etc init d mysql restart ps 看 etc mysql my conf 下的log的配置信息 一般在 var log mysql error log 2 mysql
  • Word删除单独页页眉与分节处理

    通常在word中处理页眉页脚时 xff0c 我们会发现一删全删 xff0c 一改全变的情况 xff0c 而网上方案往往难以解决且晦涩难懂 xff0c 因此 xff0c 将方法分享一下 xff0c 希望大家一看便懂 xff08 本文以遇到的三
  • Threat of Adversarial Attacks on Deep Learning in Computer Vision: A Survey 论文阅读笔记

    本文是论文的阅读笔记 Paper A Threat of Adversarial Attacks on Deep Learning in Computer Vision A Survey Author Naveed Akhtar cor n
  • ubuntu20.04安装skopeo

    文章目录 1 先安装好go环境2 配置环境3 安装skopeo3 1 安装依赖3 2 获取项目 xff0c 并进行编译3 3 构建文档3 4 安装3 5 验证 4 注意 1 先安装好go环境 如何安装go环境 xff0c 最好选择系统范围内
  • go get得到的东西不在$GOPATH中

    最近在ubuntu20 04上安装oci image tool xff0c 按照官方文档执行 xff0c 结果第一步就发现go get得到的东西找不到 xff0c 后来查阅了这篇博客 xff0c 发现了原因 xff0c 是因为开了gopro
  • 容器镜像加密-containerd imgcrypt实践

    最近在研究容器镜像加密 xff0c 发现国内对容器镜像这部分的博客好像不太多 xff0c 在看了一些人的博客后 xff0c 跟着他们的步骤进行了containerd imgcrypt的实践 xff0c 期间出现了一些错误 xff0c 决定记

随机推荐

  • ubuntu20.04安装howdy

    howdy是一款用于Linux系统的人脸识别身份验证系统 xff0c 可以看作是Windows中的Windows Hello的替代品 xff0c howdy在安装的过程中会去外网下载一些安装包 xff0c 所以前提条件是有访问外网的手段 h
  • zipimport.ZipImportError: can‘t decompress data; zlib not available

    在Ubuntu16 04上通过pyenv安装python3 6 8时出现以下错误 xff0c 记录一下 ubuntu 64 ubuntu pyenv span class token function install span 3 6 8
  • Ubuntu16.04安装zabbix4.0

    以下教程为Ubuntu16 04安装zabbix4 0 xff0c 需提前自己安装好Mysql数据库 其中第1 7点为主节点安装配置Zabbix server Zabbix agent Web前端 xff0c 第8点不用进行 xff1b 第
  • Ubuntu16.04搭建gitea1.14.1

    以下教程为在Ubuntu16 04上搭建gitea1 14 1 xff0c 同时附上官方教程链接 文章目录 1 数据库准备1 1 登录数据库1 2 创建gitea用户1 3 创建gitea数据库1 4 给gitea用户赋予数据库的权限1 5
  • ubuntu16.04搭建spice-html5用于配合KVM

    文章目录 0 配置需求1 启动spice客户端2 配置websockify3 配置spice html54 浏览器访问 0 配置需求 Firefox或Chrome浏览器 xff0c IE浏览器也可以 xff0c 但是效果不是太好 WebSo
  • python 数据挖掘中的数值计算

    一 环境安装 环境配置 xff1a OS xff1a Red Hat 4 4 7 11 查看命令 xff1a uname a xff1a 电脑以及操作系统的相关信息 cat proc version xff1a 正在运行的内核版本 cat
  • 银河麒麟下libguestfs-tools中virt工具无法使用情况

    银河麒麟下libguestfs tools中virt工具无法使用情况 问题描述 xff1a 在银河麒麟高级服务器版本V10下安装libguestfs tools工具包后 xff0c 使用virt xx等一系列命令都会出现以下错误 xff1a
  • ubuntu16.04搭建containerd

    本博客具体介绍在ubuntu16 04下安装containerd的过程 xff0c 有关ctr的命令都要有root权限才能运行 搭建过程 下载containerd安装包解压containerd安装包到根目录下启动containerd并设置开
  • KVM安装Windows11系列(一)

    本教程系列为KVM安装Windows11 xff0c 会分成两部分 xff0c 第一部分会跳过Windows11的硬件要求TPM和安全启动 xff0c 第二部分会安装TPM模拟器进行模拟 文章目录 软件环境下载Windows11镜像和驱动创
  • 容器技术对比(Docker/LXC/LXD/Multipass)

    DockerLXCLXDMultipass基本介绍为了打破 程序即应用 的观念 xff0c 通过镜像imges将作业系统核心除外 xff0c 运作应用程序所需的系统环境 xff0c 由下而上打包 xff0c 达到应用程序跨平台间的无缝接轨运
  • KVM虚拟机配置静态IP(一):Ubuntu16.04

    该系列文章为制作KVM虚拟机镜像的同时配置静态IP xff0c 为用户直接提供好固定IP xff0c 无需手动配置 系列文章目录 Ubuntu16 04Ubuntu18 04Centos6Centos7 文章目录 系列文章目录软件环境一 安
  • KVM虚拟机配置静态IP(二):Ubuntu18.04

    该系列文章为制作KVM虚拟机镜像的同时配置静态IP xff0c 为用户直接提供好固定IP xff0c 无需手动配置 系列文章目录 Ubuntu16 04Ubuntu18 04Centos6Centos7 文章目录 系列文章目录软件环境一 安
  • KVM虚拟机配置静态IP(三):Centos6

    该系列文章为制作KVM虚拟机镜像的同时配置静态IP xff0c 为用户直接提供好固定IP xff0c 无需手动配置 系列文章目录 Ubuntu16 04Ubuntu18 04Centos6Centos7 文章目录 系列文章目录软件环境一 安
  • KVM虚拟机配置静态IP(四):Centos7

    该系列文章为制作KVM虚拟机镜像的同时配置静态IP xff0c 为用户直接提供好固定IP xff0c 无需手动配置 系列文章目录 Ubuntu16 04Ubuntu18 04Centos6Centos7 文章目录 系列文章目录软件环境一 安
  • KVM下Ubuntu18.04打开设置注销问题

    问题描述 xff1a 在KVM中创建Ubuntu18 04 xff0c 打开系统设置 xff0c 发现直接注销 xff08 不是锁屏 xff0c 因为所有程序都退出 xff09 解决思路 在google上搜索发现大多数都是指向显卡问题 xf
  • cloud-init中NoCloud配置

    本文章主要记录cloud init工具中NoCloud数据源的使用方法 xff0c 可以搭配KVM镜像制作系列文章 xff0c 为用户定制操作系统 文章目录 NoCloud使用方法1 安装并初始化文件2 修改cloud init配置文件3
  • winform界面设计

    来自于以下两个地址 xff0c 为便于查阅 xff0c 所以全复制到了自己的BLOG xff1a http dotnet chinaitlab com VCNET 436373 html http www aspxboy com priva
  • cloud-init离线安装编程环境

    本博客主要介绍通过cloud init工具实现在Ubuntu16 04操作系统和KVM虚拟化技术下实现创建虚拟机同时离线安装编程环境 文章目录 1 准备离线安装包1 xff09 下载软件包2 xff09 创建放置软件包的磁盘3 xff09
  • openEuler22.03安装zabbix4.0

    以下教程为openEuler22 03安装zabbix4 0 xff0c 主要原因是openEuler官方和zabbix官方提供的提供的软件源中没有相关软件 xff0c 因此需要使用zabbix源码进行编译 xff0c 并且安装过程中会出现
  • 1.2 SingleThreadExecutor

    线程池工具类给我们提供了一些常见的线程池 xff0c 这篇来谈一谈SingleThreadExecutor线程池 使用方式 创建方式比较简单 xff0c 直接使用工具创建就ok xff0c Executors newSingleThread