Java线程池中线程的状态简介

首先明确一下线程在JVM中的各个状态(JavaCore文件中)

1.死锁,Deadlock(重点关注)

2.执行中,Runnable(重点关注)

3.等待资源,Waiting on condition(重点关注)

4.等待监控器检查资源,Waiting on monitor(eg:如果使用System.out.println等需要分配计算机资源的时候线程会如此等待,主要还需看堆栈)

5.暂停,Suspended

6.对象等待中,Object.wait()

7.阻塞,Blocked(重点关注)

8.停止,Parked(此状态必须明确,与字面意思不同,主要是指线程空闲时候的状态.如在线程池中,当线程被调用使用后再次放入到池子中,则其状态变为了Parked)

Java基本线程池的实现

public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue

参数详解如下:

corePoolSize -池中所保存的线程数,包括空闲线程.(核心线程)

maximumPoolSize -池中允许的最大线程数。

keepAliveTime -当线程数大于核心时,此为终止前多余的空闲

线程等待新任务的最长时间。

unit – keepAliveTime参数的时间单位。

workQueue -执行前用于保持任务的队列。此队列仅保持由execute

方法提交的Runnable任务。

上述参数队列workQueue与corePoolSize,maximumPoolSize的关系为:

如果corePoolSize中的线程使用完,则会使用队列workQueue,队列使用完才会按照maximumPoolSize的大小启动新的线程

对与JavaCore文件的生成针对不同的操作系统使用不同的指令

linux与unix使用的指令为:jstack -l pid >>core文件名字

IBM for aix使用的指令为:kill -3 pid

另外根据测试情况来看.parked状态的线程在linux与unix上体现不出来.只有在aix上parked状态的线程才能体现出来,估计这和不同的JVM的实现有关系

parked状态的由来:只有被使用过的线程再次放入线程池中才被赋予这种状态

Original: https://www.cnblogs.com/bailiyi/p/5317380.html
Author: 百里弈
Title: Java线程池中线程的状态简介

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/615961/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 全量同步Elasticsearch方案之Canal

    一、前言 Canal 是阿里的一款开源项目,纯 Java 开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了 MySQL(也支持 mariaDB)。 Ca…

    Java 2023年6月6日
    084
  • Spring Framework系统架构&学习路线

    核心容器-核心概念 posted @2022-07-05 21:30 yub4by 阅读(14 ) 评论() 编辑 Original: https://www.cnblogs.co…

    Java 2023年6月5日
    082
  • rocketmq之延迟队列(按照18个等级来发送)

    1 启动消费者等待传入的订阅消息 import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import …

    Java 2023年6月5日
    071
  • Spring boot 处理 error 的套路

    Spring boot 处理 error 的基本流程: Controller -> 发生错误 -> BasicErrorController -> 根据 @Req…

    Java 2023年5月30日
    072
  • CentOS7下FTP的安装与配置2

    1、安装 yum install -y vsftpd 2、配置FTP 3、建立用户文件 4、生成用户加密数据 5、修改 /etc/pam.d/vsftpd 文件 6、新建系统用户t…

    Java 2023年5月29日
    089
  • Java基础–线程池

    1. 为什么要使用线程池? 我们知道,操作系统创建线程、切换线程状态、终结线程都要进行CPU调度–这是一个耗费时间和系统资源的事情。服务端应用程序例如web应用中,比较…

    Java 2023年6月5日
    0110
  • Caused by: java.lang.NoClassDefFoundError: com/cy/store/vo/CartVo (wrong name: com/cy/store/vo/CartVO)

    出现报错:java.lang.IllegalStateException: Failed to load ApplicationContext 翻到最后一个Caused by检查检…

    Java 2023年6月5日
    082
  • 打包并部署vue项目到服务器

    步骤一 执行命令npm run build 步骤二 执行完成命令后会看到工程目录生成了一个dist文件夹,这个文件夹就是我们要部署在java项目中的文件夹,把他复制到SSM项目中去…

    Java 2023年6月7日
    075
  • 我觉得 MQ 无用的理由

    不喜欢用 MQ。 如果是同一个系统内的不同模块,可以用数据库表,来传递消息;如果是不同系统间数据接口,可以用 webservice(同步,现在好像是 gRPC 有点热)、SFTP/…

    Java 2023年6月9日
    055
  • Redis-firewall使用命令

    Redis-firewall使用命令 一、iptables防火墙 1、基本操作 查看防火墙状态 service iptables status 停止防火墙 service ipta…

    Java 2023年6月5日
    080
  • 2、系统的硬件组成

    1 系统的硬件组成概览 1.1 总线 1.2 I/O设备 1.3 主存 1.4 处理器 1 系统的硬件组成概览 1.1 总线 总线是负责在各个 部件之间传递信息的,信息的单位是字节…

    Java 2023年6月7日
    0107
  • 历时2月,动态线程池 DynamicTp 发布里程碑版本 V1.0.8

    关于 DynamicTp DynamicTp 是一个基于配置中心实现的轻量级动态线程池管理工具,主要功能可以总结为动态调参、通知报警、运行监控、三方包线程池管理等几大类。 经过多个…

    Java 2023年6月14日
    091
  • Java线程通信

    Java线程通信 螣蛇乘雾,终为土灰。 多个线程协同工作完成某个任务时就会涉及到线程间通信问题。如何使各个线程之间同时执行,顺序执行、交叉执行等。 一、线程同时执行 创建两个线程a…

    Java 2023年6月5日
    0105
  • java学习之socket编程

    Socks实际上是什么:实际上是提供了精彩通信的端口,在通信之前双方都必须要创造一个端点才能通信,其实感觉socket跟计算机的三次握手有些相似,分为三个步骤:(1)服务器监听:服…

    Java 2023年6月13日
    075
  • 数据结构变化可视化网站

    数据结构变化可视化网站 支持的数据结构: 示例(B树): posted @2022-05-01 12:52 daheww 阅读(35 ) 评论() 编辑 Original: htt…

    Java 2023年6月6日
    098
  • Springboot笔记

    SpringBoot HelloWorld 1.创建Meven工程 2.引入依赖 pom.xml org.springframework.boot spring-boot-star…

    Java 2023年6月16日
    0122
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球