Java并发包1--线程的状态及常用方法
一、线程主要有以下几种状态:
new(新建):线程刚刚被创建
runnable(就绪):新建的线程执行start方法进入就绪状态等待系统调度分配CPU,被分配了之后就进入运行中状态
blocked(阻塞):当线程执行被锁的代码块或方法时,等待其他线程释放锁而处于阻塞状态
waiting(等待):线程进入等待状态,需要等待其他线程做出一些特点动作(通知或中断)
time_waiting(超时等待):和waiting状态类似,不过可以在指定的时间自行结束等待
terminated(终止状态):当线程执行run方法完成或因为异常退出时进入终止状态
二、线程的各种状态的流转图如下示:

三、线程的各种方法用法
start():线程被创建之后,执行start方法使线程进入就绪状态,等待系统调度分配CPU来执行
run():线程执行业务逻辑,执行完成run方法里面的内容就会进入终止状态
yield():yield方法是让步的意思,将当前线程状态由“运行中”进入到“就绪状态”,目的是让出CPU来给其他线程来执行,但是不会释放当前线程持有的对象锁(让步之后就绪的线程等待CPU执行,有可能还会执行让步的线程)
wait():使当前线程进入等待状态,并且释放当前线程持有的对象锁,直到等待的时间到了或者是其他线程执行该对象的唤醒方法,如何才可继续进入就绪状态等待CPU
notify():唤醒该对象监视器上等待单个线程
notifyAll():唤醒该对象监视器上等待的所有线程
sleep():使当前线程进入睡眠等待状态,不会释放对象锁,睡眠时间结束重新进入就绪状态
join():join方法会使当前线程当期执行,直到join的线程执行完成才会继续执行。比如main方法里面有两个线程
t1.start();
t1.join();
t2.start();
则t1线程执行之后,再执行t1.join(),那么此时main线程就会放弃后面的执行,直到t1线程执行结束之后才会继续执行main线程,然后继续执行t2线程。
Java并发包1--线程的状态及常用方法的更多相关文章
- Java并发包之线程池概述
前言 线程池的作用就是将线程的管理.创建.销毁等操作与线程需要执行的任务隔离开来,从而避免线程频繁的创建与销毁,以及大量的线程的上下文切换造成的资源损耗.关于Java并发包中的线程池部分,我把它们分为 ...
- Java并发包中线程池的种类和特点介绍
Java并发包提供了包括原子量.并发集合.同步器.可重入锁.线程池等强大工具这里学习一下线程池的种类和特性介绍. 如果每项任务都分配一个线程,当任务特别多的时候,可能会超出系统承载能力.而且线程的创建 ...
- Java并发包中线程池ThreadPoolExecutor原理探究
一.线程池简介 线程池的使用主要是解决两个问题:①当执行大量异步任务的时候线程池能够提供更好的性能,在不使用线程池时候,每当需要执行异步任务的时候直接new一个线程来运行的话,线程的创建和销毁都是需要 ...
- 阿里P7告诉你什么是java并发包、线程池、锁
并发包 java.util.concurrent从jdk1.5开始新加入的一个包,致力于解决并发编程的线程安全问题,使用户能够更为快捷方便的编写多线程情况下的并发程序. 同步容器 同步容器只有包括Ve ...
- java多线程(六)-线程的状态和常用的方法
一个线程可以处于以下几种状态之一: (1) 新建(new):当线程被创建时,它只会短暂的处于这种状态,此时它已经获得了必须的系统资源,并执行了初始化,该线程已经有资格获取cpu时间了,之后它将转化为可 ...
- java并发包:线程池 executorservice
1.newCachedThreadPool() -缓存型池子,先查看池中有没有以前建立的线程,如果有,就reuse.如果没有,就建一个新的线程加入池中 -缓存型池子通常用于执行一些生存期很短的异步型 ...
- Java并发包——线程安全的Map相关类
Java并发包——线程安全的Map相关类 摘要:本文主要学习了Java并发包下线程安全的Map相关的类. 部分内容来自以下博客: https://blog.csdn.net/bill_xiang_/a ...
- Java并发包——线程安全的Collection相关类
Java并发包——线程安全的Collection相关类 摘要:本文主要学习了Java并发包下线程安全的Collection相关的类. 部分内容来自以下博客: https://www.cnblogs.c ...
- Java性能分析之线程栈详解与性能分析
Java性能分析之线程栈详解 Java性能分析迈不过去的一个关键点是线程栈,新的性能班级也讲到了JVM这一块,所以本篇文章对线程栈进行基础知识普及以及如何对线程栈进行性能分析. 基本概念 线程堆栈也称 ...
随机推荐
- 封装的head
//获取浏览器和版本号var userAgent=window.navigator.userAgent, rMsie=/(msie\s|trident.*rv:)([\w.]+)/, rFirefox ...
- __x__(27)0907第四天__ float 浮动
float 浮动 块元素脱离文档流,水平排列. 浮动元素 会尽量往左上(left),或者右上(right)浮动,直到遇到 块元素 或者 其他浮动元素. 可选值: none; 默认值,不脱离文档流 ...
- vue_事件绑定 v-on _事件修饰符
事件绑定 v-on 传参的同时,接收事件对象 <button @click="test('111', $evnt)">哈哈</button> 事件修饰符 阻 ...
- Go语言基础之切片
Go语言基础之切片 本文主要介绍Go语言中切片(slice)及它的基本使用. 引子 因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性. 例如: func arraySum(x ...
- ng7 设置文件路径别名
/tsconfig.json 配置后重启服务 { "compileOnSave": false, "compilerOptions": { "base ...
- bootstrap网格设置等高度
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- linux挂载系统ios文件与gcc安装
挂载方法: 1.将iso文件拷贝到某一目录下,(/test) 2.建立挂载点文件夹:mkdir /mnt/iso1 3.进入 mount –o loop /test/**.iso /mnt/is ...
- C博客作业01--分支,顺序结构
1.本章学习总结 1.1 思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 因为暑假的时候没有事先了解过C语言这门课程,翁恺老师的学习视频没看,pta习题也没有刷,所以开学后学得也蛮吃 ...
- mysql 数据库的数据类型
- p12文件和mobileprovision文件
http://www.cnblogs.com/YouXianMing/p/3848188.html https://www.jianshu.com/p/73c430f468e8 https://blo ...