Java并发机制(1)--线程状态与方法(转)
Java并发编程:Thread类的使用
个人总结:参考:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3920357.html
参考:https://blog.csdn.net/sinat_36042530/article/details/52565296
1、线程的状态:
创建(new) -> 就绪(runnable) ->运行(running)->阻塞(blocked)
(分配资源) (等待获取cpu时间片) ->消亡(dead)
2、线程状态的转换:
2.1:线程的阻塞状态 :
1)调用sleep()进入睡眠状态
2)调用wait()将线程挂起
3)任务在等待某个输入输出的完成
4)任务试图在某个对象上调用其同步控制方法。但是对象锁不可用。因为另外一个任务已经获得这个锁 (如等待获取锁)
3)、4)两种情形interrupt方法将不会被中断
2.2当线程Thread处在running状态时:
(1):调用某个对象的wait()方法:这是继承自Object中的方法,当前线程释放锁,重新进入线程池等待,只有调用notify(),notifyAll()唤醒该线程,该线程才会就绪队列排队等待分配资源(进入锁池竞争锁)。
(2):sleep方法是线程的,即交出当前的cpu时间片,但不会释放锁,时间到达后,也不一定会立即执行(如未获取时间片),且必须捕获InterruptedException异常或向上抛出。
(3):yield方法,相当于sleep方法,交时间片不交锁,区别在于无法控制交出的时间。
(4):join方法,thread.join():当前线程等待thread线程完成;thread.join(long m,(int nanoseconds)):当前线程等待thread线程执行m时间;
(5):interrupt方法:只能中断1,2中的阻塞状态,使线程抛出异常,结束。而且不行中断只在running的线程(可以通过设定标志位flag结束)。
(6):getId(),getName();
(7):setDaemon和isDaemon设置守护线程,守护线程依赖于创建它的线程,而用户线程则不依赖。如垃圾收集器就是守护线程。
wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用。
如图:五种状态之间的转换;

更详细请移步:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3920357.html
3、对象的锁池与等待池:
Java并发机制(1)--线程状态与方法(转)的更多相关文章
- Java并发机制(7)--线程池ThreadPoolExecutor的使用
Java并发编程:线程池的使用整理自:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3932921.html 1.什么是线程池,为什么要使用线程池: 1.1. ...
- 《Java并发编程的艺术》Java并发机制的底层实现原理(二)
Java并发机制的底层实现原理 1.volatile volatile相当于轻量级的synchronized,在并发编程中保证数据的可见性,使用 valotile 修饰的变量,其内存模型会增加一个 L ...
- 【java并发编程艺术学习】(三)第二章 java并发机制的底层实现原理 学习记录(一) volatile
章节介绍 这一章节主要学习java并发机制的底层实现原理.主要学习volatile.synchronized和原子操作的实现原理.Java中的大部分容器和框架都依赖于此. Java代码 ==经过编译= ...
- Java 并发系列之二:java 并发机制的底层实现原理
1. 处理器实现原子操作 2. volatile /** 补充: 主要作用:内存可见性,是变量在多个线程中可见,修饰变量,解决一写多读的问题. 轻量级的synchronized,不会造成阻塞.性能比s ...
- Java 并发机制底层实现 —— volatile 原理、synchronize 锁优化机制
本书部分摘自<Java 并发编程的艺术> 概述 相信大家都很熟悉如何使用 Java 编写处理并发的代码,也知道 Java 代码在编译后变成 Class 字节码,字节码被类加载器加载到 JV ...
- 《Java并发编程的艺术》读书笔记:二、Java并发机制的底层实现原理
二.Java并发机制底层实现原理 这里是我的<Java并发编程的艺术>读书笔记的第二篇,对前文有兴趣的朋友可以去这里看第一篇:一.并发编程的目的与挑战 有兴趣讨论的朋友可以给我留言! 1. ...
- Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- Java并发编程:线程池的使用(转)
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- Java并发编程:线程控制
在上一篇文章中(Java并发编程:线程的基本状态)我们介绍了线程状态的 5 种基本状态以及线程的声明周期.这篇文章将深入讲解Java如何对线程进行状态控制,比如:如何将一个线程从一个状态转到另一个状态 ...
- Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁.偏向锁) Java 并发编程 ...
随机推荐
- Spring5基础
基于Spring 5.2.6 版本. Spring概念 IOC容器 IOC底层原理的演进过程--本质就是为了高内聚,低耦合 在原始方式中,我们通过new创建对象来实现创建对象的逻辑,但是这样做当对象路 ...
- k8s家族Pod辅助小能手Init容器认知答疑?
k8s家族Pod辅助小能手Init容器认知答疑? k8s集群Init 容器是一种特殊容器,职责是在Pod的生命周期中作为应用容器的前置启动容器. 在很多应用场景中,在 Pod 内的应用容器正式启动之前 ...
- 国内商业智能软件的天下来了,选择BI工具我们应该看这3点!
数据变革时代,经常有"外行人"问到,何谓商业智能BI? BI可以说是通过软件或者服务,将网络时代中海量的数据转化为行动上的洞察力,从而影响企业的战略和战术决策. 当海量.高增长率 ...
- 想用WPS 2019模板设计报表?Smartbi V9没问题
导读:Smartbi V9 报表设计器可以支持WPS 2019个人版了,而且报表功能也有明显增强. 企业报表软件(Smartbi Spreadsheet)是思迈特软件于2014年针对企业客户.系统 ...
- 创新引领,再获嘉誉!Smartbi亮相亚太银行数博会,共话未来银行数字化趋势
4月21日,以"加速数字化,引领银行业务创新"为主题的第六届亚太银行数字化创新博览会在上海盛大开幕.本次高峰论坛吸引了400多位来自学术界.咨询行业以及银行业等不同领域的行业大咖齐 ...
- 更快的网络文件系統 — Oxfs
什麽时候需要网络文件系统 ? 做嵌入式的同学经常会使用 NFS 将 host 上的某个目录挂载到开发板上,方便 host 上编译构建后能直接在板子上运行,减少手工拷贝操作.网站开发时,在 host 上 ...
- dbeaver安装配置
安装出现库依赖没有,可以添加maven仓库 修改字体:小四
- 教程6--配置ssh
配置ssh 如果需要使用到远程仓库,那么就需要两个步骤: (1)配置创建SSH key(用于识别用户,免得每次输入账号密码) 在命令窗口输入ssh-keygen -t rsa -c "你的邮 ...
- Tableau绘制K线图、布林线、圆环图、雷达图
Tableau绘制K线图.布林线.圆环图.雷达图 本文首发于博客冰山一树Sankey,去博客浏览效果更好.直接右上角搜索该标题即可 一. K线图 1.1 导入数据源 1.2 拖拽字段 将[日期]托到列 ...
- LeetCode-013-罗马数字转整数
罗马数字转整数 题目描述:罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 ...