线程的生命周期及五种基本状态介绍

一.线程的生命周期及五种基本状态

关于Java中线程的生命周期,首先看一下下面这张较为经典的图:

 

上图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知识点,Java中的多线程也就基本上掌握了。主要包括:

Java线程具有五中基本状态

新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();

就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;

运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。注:就     绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;

阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种:

1.等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态;

2.同步阻塞 -- 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;

3.其他阻塞 -- 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php外联样式,css外联样式不起作用怎么办

css外联样式不起作用的解决办法:首先用sublime编辑器打开css文件;然后修改本地css文件编码格式为“utf-16LE”;最后重新保存运行即可。本教程操作环境:Windows7系统、Sublime Text3&&css3版本,该方法适用于所有…

java.io.IOException: DerInputStream.getLength(): lengthTag=111, too big解决方法

1:报错如下 Exception in thread "main" java.io.IOException: DerInputStream.getLength(): lengthTag111, too big.at sun.security.util.DerInputStream.getLength(DerInputStream.java:599)at sun.security.util.DerValue.init(DerValue.java:391)at sun.securit…

ClassLoader.getResourceAsStream(name);获取配置文件的方法

1:报错如下 2:分析 3:解释 使用Spring的ClassPathResource来读取maven项目resource下的文件 一般来说,我们项目的配置文件及静态资源都会放置在resources目录下。有时我们在项目中使用到resources目录下的文件,这时我们可以使用Spring下的Resouce接口来…

ClassPathResource使用简介

ClassPathResource使用简介 使用Spring的ClassPathResource来读取maven项目resource下的文件 一般来说,我们项目的配置文件及静态资源都会放置在resources目录下。有时我们在项目中使用到resources目录下的文件,这时我们可以使用Spring下的Resouce接口来…

关于Class.getResource和ClassLoader.getResource的路径问题

Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题。 Class.getResource(String path) path不以’/开头时,默认是从此类所在的包下取资源; path 以’/开头时&…

idea 快捷键获取类的全限定类名(包名+类名)

什么是全限定类名:就是 包名类名 1:选中一个类名,然后右键 Copy Reference 2:点击paste without Formatting 3:查看结果

UICollectionView——整体总结

前言 这几天有时间看了下UICollectionView的东西,才发觉它真的非常强大,很有必要好好学习学习。以前虽然用过几次,但没有系统的整理总结过。这两天我为UICollectionView做一个比较全面的整理。包括基本使用,自定义布局&#xff0c…

java Class对象返回的都是指向同一个java堆地址上的Class引用

一旦类被加载了到了内存中,那么不论通过哪种方式获得该类的Class对象,它们返回的都是指向同一个java堆地址上的Class引用。jvm不会创建两个相同类型的Class对象 public class Cat {static {System.out.println("wwwww");} }class T1 {public s…

matlab基础与实例教程,MATLAB基础与实例教程

系统全面,实例丰富 考虑到Matlab进行仿真和运算分析时的基础知识和实践操作,讲解从基础的变量、函数、数据类型等入手,涉及到数学分析、图形可视化、Simulink仿真、文件读写等,全面地介绍了Matlab的分析方法。 精心编排&#xff0…

近300万记录的论坛还用这个分页存储过程

http://www2.gliet.edu.cn/club2/bbs/list_new_today.asp用于列出今日最新贴的。有个想不明的问题是为什么DeclareSqlText Varchar(1000)声明为1000个字符大了,但超过255字符之后exec(SqlText)就会出错。自动把后面的cut掉了?ALTERPROCEDUREbbsListNewTo…

JAVA项目中classpath路径详解

classpath是什么路径? 1.classpath指的是类路径,也就是编译之后的target文件夹下的WEB-INF/class文件夹。 2.resources文件夹存放的是各种配置文件,当项目被编译时resources下的所有配置文件均被放在 WEB-INF/class文件夹下。也就是类路径下…

Idea运行项目报错:java.lang.OutOfMemoryError: Java heap space/ java.lang.OutOfMemoryError: GC overhead 解决方法

问题 使用Idea运行代码量比较多的项目时,会报错:java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: GC overhead limit exceeded java.lang.OutOfMemoryError: GC overhead limit exceeded 仔细看了整个报错过程,堆…

Leaning Method

001用分布在两个地方的两台办公电脑开发一个项目,计划使用gitee同步代码。具体应该怎么操作? 要使用 Gitee 同步代码,你可以按照以下步骤进行操作: 在两台办公电脑上都安装 Git 客户端,并在 Gitee 上创建一个项目仓库…

wamp php文件怎么创建数据库,phpmyadmin怎么创建数据库

phpmyadmin怎么创建数据库?1、首先登陆phpmyadmin,有两种方法,第一钟是直接点击wampserver图标,再点击phpmyadmin即可登陆进来是最常用的方法;其次是在浏览器地址中输入http://localhost:8080/phpmyadmin(注意8080是端口号&#…

maven的三大生命周期

一、Maven的生命周期 Maven的生命周期就是对所有的构建过程进行抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。 Maven的生命周期是抽象的,即生命周期不做任何实际的工作,实际任务由插…

static{}静态代码块与{}普通代码块和构造代码块之间的区别

public class TestStatic {{System.out.println("构造代码块");}TestStatic() {System.out.println("构造函数代码块");}//类级别的初始化,只是在类加载的时候做一次static {System.out.println("static静态代码块");} } 1.静态代码块…

多线程编程(三)--创建线程之Thread VS Runnable

前面写过一篇基础的创建多线程的博文: 那么本篇博文主要来对照一下这两种创建线程的差别。 继承Thread类: 还拿上篇博客的样例来说: 四个线程各自卖各自的票,说明四个线程之间没有共享,是独立的线程。每一个线程平等。…

用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变

使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变 答: 使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。 代码 public class TestFinal {private static final StringBuffer a new S…

Intellij IDEA中maven更新不下来pom中的jar包,reimport失效

问题: Intellij IDEA中使用maven reimport包,一直失败 即使我将本地已存在的一个jar包目录删除了,pom文件那里也没飘红提示找不到 解决方法: maven设置中去掉离线下载。 Work offline:勾选上时不会走maven远程仓…