一、线程主要有以下几种状态:

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--线程的状态及常用方法的更多相关文章

  1. Java并发包之线程池概述

    前言 线程池的作用就是将线程的管理.创建.销毁等操作与线程需要执行的任务隔离开来,从而避免线程频繁的创建与销毁,以及大量的线程的上下文切换造成的资源损耗.关于Java并发包中的线程池部分,我把它们分为 ...

  2. Java并发包中线程池的种类和特点介绍

    Java并发包提供了包括原子量.并发集合.同步器.可重入锁.线程池等强大工具这里学习一下线程池的种类和特性介绍. 如果每项任务都分配一个线程,当任务特别多的时候,可能会超出系统承载能力.而且线程的创建 ...

  3. Java并发包中线程池ThreadPoolExecutor原理探究

    一.线程池简介 线程池的使用主要是解决两个问题:①当执行大量异步任务的时候线程池能够提供更好的性能,在不使用线程池时候,每当需要执行异步任务的时候直接new一个线程来运行的话,线程的创建和销毁都是需要 ...

  4. 阿里P7告诉你什么是java并发包、线程池、锁

    并发包 java.util.concurrent从jdk1.5开始新加入的一个包,致力于解决并发编程的线程安全问题,使用户能够更为快捷方便的编写多线程情况下的并发程序. 同步容器 同步容器只有包括Ve ...

  5. java多线程(六)-线程的状态和常用的方法

    一个线程可以处于以下几种状态之一: (1) 新建(new):当线程被创建时,它只会短暂的处于这种状态,此时它已经获得了必须的系统资源,并执行了初始化,该线程已经有资格获取cpu时间了,之后它将转化为可 ...

  6. java并发包:线程池 executorservice

    1.newCachedThreadPool()  -缓存型池子,先查看池中有没有以前建立的线程,如果有,就reuse.如果没有,就建一个新的线程加入池中 -缓存型池子通常用于执行一些生存期很短的异步型 ...

  7. Java并发包——线程安全的Map相关类

    Java并发包——线程安全的Map相关类 摘要:本文主要学习了Java并发包下线程安全的Map相关的类. 部分内容来自以下博客: https://blog.csdn.net/bill_xiang_/a ...

  8. Java并发包——线程安全的Collection相关类

    Java并发包——线程安全的Collection相关类 摘要:本文主要学习了Java并发包下线程安全的Collection相关的类. 部分内容来自以下博客: https://www.cnblogs.c ...

  9. Java性能分析之线程栈详解与性能分析

    Java性能分析之线程栈详解 Java性能分析迈不过去的一个关键点是线程栈,新的性能班级也讲到了JVM这一块,所以本篇文章对线程栈进行基础知识普及以及如何对线程栈进行性能分析. 基本概念 线程堆栈也称 ...

随机推荐

  1. 【自动化测试】使用Java+selenium填写验证码成功登录

    这是我第一次发博客,若有问题,请多多指教! 本次是为了帮忙解决,如果在平时自动化遇到有验证码填写的情况,我们如何成功登录情况. 思路: 首先我们先将验证码复制并保存成一个图片,然后使用tesserac ...

  2. CentOS下的Mysql的安装和使用

    1.使用安装命令 :yum -y install mysql mysql-server mysql-devel 安装完成却发现Myserver安装缺失,在网上找原因,原来是因为CentOS 7上把My ...

  3. linux学习:xargs与grep用法整理

    xargs xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具. xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据. xargs 也可 ...

  4. JDBC的理解

    import java.sql.*;//倒入java.sql包 public class JDBC { //封装没有返回值的jdbc函数(Update) --适用于增 删 改 public stati ...

  5. 源码包安装apache

    含有的命令:cd,wget,tar,cd,yum,./configure,make,make install,vim ===安装apache=== [root@ycj ~]# cd /usr/src/ ...

  6. day 23 二十三、对象方法,类方法,封装,绑定方法

    一.对象的特有名称空间 __init__方法会在实例化对象时被调用 1.会为实例化的对象形成空的名称空间 2.就是一个方法,可以被传参,在类名(实参)这种方式下调用并传参 __init__(self ...

  7. 浅谈 R_S触发器

    1.. 1.要点 就是S R端谁是0谁就掌握了绝对权力,因为与门的缘故. 对于上图 S在左边,所以只要S是0 ,Q必定是1.另外对于R 只要R是0,Q非才能是1,q非又是S端的关键与信号,所以只有R为 ...

  8. socks-proxy---with ssh

    socks-proxy---with sshhttps://blog.csdn.net/scien2011/article/details/54562501

  9. react-native-Cocoapods-Swift-Project

    https://reactnative.cn/docs/integration-with-existing-apps/ 1.创建一个xcode工程,single View就行,项目语言选择swift, ...

  10. go 学习第一个hello world 遇到的问题

    mac:Go安装和配置+GoLand安装和使用之完整教程 https://blog.csdn.net/zxy_666/article/details/80182688 前言作为一个go语言程序员,觉得 ...