Java并发编程3——线程状态转换
Java并发编程
`
文章目录
- Java并发编程
- 一、操作系统进程状态转换
- 二、Java线程转换
- 1. Java线程状态分类
- 2.线程状态转换详解
一、操作系统进程状态转换
二、Java线程转换
1. Java线程状态分类
从Java API(Thread.State)层面来描述,Java线程有六种状态:
1、NEW —— 线程刚被创建,但是还没有调用start()方法
2、RUNNABLE —— 当调用了start()方法之后
注意:Java API层面的RUNNABLE状态包含了操纵系统层面的运行状态和阻塞状态
3、BLOCKED、WAITTING、TIMED_WAITTING都是Java API层面对操作系统阻塞状态的细分
4、TERMINATED 当线程代码运行结束
2.线程状态转换详解
假设存在Thread t
NEW ——> RUNNABLE
当调用t.start()方法时,线程t由NEW ——> RUNNABLERUNNABLE<——> WAITING
当线程t使用 synchronized(obj) 获得对象锁之后
1、调用obj.wait(),线程t从RUNNABLE——> WAITING
2、调用obj.notify() obj.notifyAll() t.interrupt()时
竞争锁成功,线程t WAITING ——> RUNNABLE
竞争锁失败,线程t WAITING ——> BLOCKEDRUNNABLE<——> WAITING
1、当当前线程调用t.join(),当前线程从RUNNABLE——> WAITING
注意:是当前线程在线程t的对象监视器上等待
2、线程t运行结束或调用了当前线程的interrupt()时,当前线程从 WAITING ——> RUNNABLERUNNABLE <——> WAITING
1、当前线程调用LockSupport.park() 会让当前线程从 RUNNABLE ——> WAITING
2、调用LockSupport.unpark(目标线程)或调用了目标线程的interrupt(), 会让目标线程从WAITING ——> RUNNABLERUNNABLE <——> TIMED_WAITING
1、当当前线程调用 t.join(long n)时,当前线程从RUNNABLE ——> TIMED_WAITING
注意:是当前线程在线程t对象的监视器上等待
2、当当前线程等待时间超过了n毫秒或线程t运行结束或调用了当前线程的iterrupt(),当前线程从TIMED_WAITING ——> RUNNABLERUNNABLE <——> TIMED_WAITING
1、当前线程调用Thread.sleep(long n), 当前线程从RUNNABLE ——> TIMED_WAITING
2、当前线程等待时间超过了n毫秒,当前线程从 TIMED_WAITING ——>RUNNABLERUNNABLE <——> TIMED_WAITING
1、当前线程调用LockSupport.parkNanos(long nanos) 或 LockSupport.parkUntil(long deadLine)时,当前线程从RUNNABLE ——> TIMED_WAITING
2、调用LockSupport.unpark(目标线程)或调用了目标线程的interrupt()或等待超时,或让目标线程从TIMED_WAITING ——> RUNNABLERUNNABLE <——> BLOCKED
1、线程t用synchronized(obj) 获取了对象锁时如果竞争失败,从RUNNABLE ——> BLOCKED
2、持obj锁线程的同步代码块执行完毕,会唤醒该对象上所有的BLOCKED的线程重新竞争,如果其中线程t竞争成功,从BOCKLED——>RUNNABLE,其他失败的线程仍然BLOCKEDRUNNABLE <——> TERMINATED
当前线程所有代码运行完毕,进入TERMINATED
Java并发编程3——线程状态转换相关推荐
- Java并发编程之线程状态总结
线程状态 新创建(NEW):新创建了一个线程对象,但还没有调用start()方法,如new Thread(r). 可运行(RUNNABLE):调用start方法,线程处于runnable状态. 阻塞( ...
- Java并发编程一线程池的五种状态
推荐:Java并发编程汇总 Java并发编程一线程池的五种状态 原文地址 Java多线程线程池(4)–线程池的五种状态 正文 线程池的5种状态:Running.ShutDown.Stop.Tidyin ...
- (转)Java并发编程:线程池的使用
背景:线程池在面试时候经常遇到,反复出现的问题就是理解不深入,不能做到游刃有余.所以这篇博客是要深入总结线程池的使用. ThreadPoolExecutor的继承关系 线程池的原理 1.线程池状态(4 ...
- java并发编程与线程安全
2019独角兽企业重金招聘Python工程师标准>>> 什么是线程安全 如果对象的状态变量(对象的实例域.静态域)具有可变性,那么当该对象被多个线程共享时就的考虑线程安全性的问题,否 ...
- JAVA并发编程3_线程同步之synchronized关键字
在上一篇博客里讲解了JAVA的线程的内存模型,见:JAVA并发编程2_线程安全&内存模型,接着上一篇提到的问题解决多线程共享资源的情况下的线程安全问题. 不安全线程分析 public clas ...
- [转]Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- Java并发编程:线程池的使用
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...
- 【Java 并发编程】线程池机制 ( ThreadPoolExecutor 线程池构造参数分析 | 核心线程数 | 最大线程数 | 非核心线程存活时间 | 任务阻塞队列 )
文章目录 前言 一.ThreadPoolExecutor 构造参数 二.newCachedThreadPool 参数分析 三.newFixedThreadPool 参数分析 四.newSingleTh ...
- 【Java 并发编程】线程池机制 ( 线程池示例 | newCachedThreadPool | newFixedThreadPool | newSingleThreadExecutor )
文章目录 前言 一.线程池示例 二.newCachedThreadPool 线程池示例 三.newFixedThreadPool 线程池示例 三.newSingleThreadExecutor 线程池 ...
- 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...
最新文章
- 在这个时代,如何管理好95后员工?
- 【不会吧不会吧,不会有人真的三分钟入门Python了吧?】Python编程基础
- crontab详解-如何让脚本自动定时运行,设置、启动 linux定时器
- 【集合工具类:Collections】
- vue 字典_【开源】基于Vue的前端组件库HeyUI
- Anchor-free新思路,统一目标检测、实例分割、姿态估计三种任务
- 第2关:子节点创建、列出、删除
- c语言 怎么访问64位地址_大神用10000字总结了嵌入式C语言必学知识点……
- cassandra 学习笔记(2)
- 室内定位发展趋势分析
- 西电Pintos操作系统课程设计 实验三
- 人脸识别demo分析(opencv版本)
- 【JY】No.7.2力学架构迈达斯使用教程
- 微信小程序实现自动定位
- java实现鼠标宏编程_对键盘鼠标宏处理--按键精灵让我们不要重复工作
- 斐波那契数列C语言设计步骤,斐波那契数列c语言函数
- 常用电子邮箱格式怎么写?哪个邮箱最安全最好用?
- 使用纸壳CMS创建多语言网站
- 分析亚马逊竞争对手Listing的技巧与操作步骤
- java object 是否为null,java – 为什么cast(Object)null结果为null?
热门文章
- 头像设计,如何用PS制作个性头像
- 在vue中使用marked解析MARKDOWN,生成目录,运行代码示例
- 小白兔写话_小白兔写话二年级作文
- 【215期推荐】另类思考:HIS能给医院带来什么“坏处”?
- (附源码)springboot宠物管理系统 毕业设计121654
- 计算机硬盘从盘的设置,图文解说:电脑硬盘的主从盘设置方法_清风一笑
- 拉开差距的面试题:如何设计一个电商平台积分兑换系统??
- vue + Electron 制作桌面应用
- 工行u盾显示316_工行U盾常见故障处理
- 计算机正在获取ip,电脑频繁显示网络电缆已拔出和正在获取IP怎么办