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<Runnable> workQueue)
参数详解如下:
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状态的由来:只有被使用过的线程再次放入线程池中才被赋予这种状态
Java线程池中线程的状态简介的更多相关文章
- ThreadPoolExecutor线程池中线程不能超过核心线程数量的问题
int arg1=2;//核心线程 int arg2=40;//最大线程数量 int arg3=100;//空余保留时间 ThreadPoolExecutor pool=new ThreadPoolE ...
- Java线程池中线程的生命周期
设:我们有一个coreSize=10,maxSize=20,keepAliveTime=60s,queue=40 1.池初始化时里面没有任何线程. 2.当有一个任务提交到池就创建第一个线程. 3.若继 ...
- Java并发包中线程池ThreadPoolExecutor原理探究
一.线程池简介 线程池的使用主要是解决两个问题:①当执行大量异步任务的时候线程池能够提供更好的性能,在不使用线程池时候,每当需要执行异步任务的时候直接new一个线程来运行的话,线程的创建和销毁都是需要 ...
- -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中
本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait( ...
- Java并发编程中线程池源码分析及使用
当Java处理高并发的时候,线程数量特别的多的时候,而且每个线程都是执行很短的时间就结束了,频繁创建线程和销毁线程需要占用很多系统的资源和时间,会降低系统的工作效率. 参考http://www.cnb ...
- 线程池中状态与线程数的设计分析(ThreadPoolExecutor中ctl变量)
目录 预备知识 源码分析 submit()源码分析 shutdownNow()源码分析 代码输出 设计目的与优点 预备知识 可以先看下我的另一篇文章对于Java中的位掩码BitMask的解释. 1.一 ...
- Java多线程系列 JUC线程池02 线程池原理解析(一)
转载 http://www.cnblogs.com/skywang12345/p/3509960.html ; http://www.cnblogs.com/skywang12345/p/35099 ...
- java 线程池(线程的复用)
一. 线程池简介 1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池.使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动 ...
- 由浅入深理解Java线程池及线程池的如何使用
前言 多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担.线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致Out of Memory ...
随机推荐
- Vue中音乐播放器
一.安装依赖 yarn add vue-aplayer or` npm i vue-aplayer 二.使用 <template> <div class="vue_ap ...
- windows离线安装sublime插件:ctags
网络上一堆安装ctags教程,可都是在线安装. 花了点时间摸索出了离线安装教程. 1. 准备好sublime 和 package control sublime我用的版本是text 2. text 3 ...
- Linux提权中常见命令大全
在拿到一个 webshell 之后,大家首先会想到去把自己的权限提升到最高,windows 我们会提升到 SYSTEM 权限,而 Linux 我们会提升到 root 权限,拿在进行 Linux 提权的 ...
- [BZOJ1202] [NZOI2005]狡猾的商人
Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), .当 ...
- Halcon一日一练:阈值分割的几个算子
threshold(Image:Region:MinGray:MaxGray:) 功能:得到灰度值在最小与最大这间的那些部分.其返回仍然是一个区域. MinGray<MaxGray. 这个算子可 ...
- ride.py打不开RF,而是打开pycharm
标题中问题的解决方式: 进入到E:\soft\Python\Python36\Scripts,选中ride.py右键-打开方式选择python即可
- MyBatis 示例-缓存
MyBatis 提供两种类型的缓存,一种是一级缓存,另一种是二级缓存,本章通过例子的形式描述 MyBatis 缓存的使用. 测试类:com.yjw.demo.CacheTest 一级缓存 MyBati ...
- “Triplet network”三元组网络阅读笔记
记录<DEEP METRIC LEARNING USING TRIPLET NETWORK>阅读笔记 文章总体内容: 作者在前人提出的多个特征提取方法的基础上提出Triplet netwo ...
- 安装配置 Android Studio
概述 Android Studio 本身应该是开箱即用的,但是由于 dl.google.com 访问太慢,导致了这样那样的问题,因此我们只需要改一下 hosts 就行了 具体步骤 在Ping检测网站查 ...
- solr学习篇(三) solr7.4 连接MySQL数据库
目录 导入相关jar包 配置连接信息 将数据库导入到solr中 验证是否成功 创建一个Core,创建Core的方法之前已经很详细的讲解过了,如果还是不清楚请参考 solr7.4 安装配置篇: 1.导入 ...