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/684240/

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

(0)

大家都在看

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