多线程学习-基础(二)线程状态装换

一、线程状态转换

下面的这个图非常重要!你如果看懂了这个图,那么对于多线程的理解将会更加深刻

状态说明:
(1)新建状态(New):新创建了一个线程对象。
(2)就绪状态(Runnable):线程被创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行的线程池中,变得可运行,等待获取cpu的使用权限。
(3)运行状态(Running):就绪状态的线程获取了cpu的使用权,执行程序代码。
(4)阻塞状态(Blocked):阻塞状态是线程由于某种原因放弃了cpu的使用权,暂时停止运行,直到线程进入就绪状态,才有机会转到运行状态,阻塞的情况分为三种:
等待阻塞:运行线程执行wait()方法,JVM会把线程放入等待池中。(wait会释放所有的锁)
同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被其他线程占用,则JVM会把该线程放入锁池中。
其他阻塞:运行的线程执行sleep()或join()方法,或者发出I/O请求时,JVM会把该线程设置为阻塞状态。当sleep()状态超时,join()等待线程终止或超时,或者I/O处理完毕时,线程重新转入就绪状态。(注意:sleep是不会释放所持有的锁的)
(5)死亡状态(Dead):线程执行完了,或者异常退出了run()方法,该线程的生命周期结束。

原文地址:https://www.cnblogs.com/newwind/p/8901899.html

时间: 2024-10-18 10:40:41

多线程学习-基础(二)线程状态装换的相关文章

Java多线程编程基础之线程对象

在进入java平台的线程对象之前,基于基础篇(一)的一些问题,我先插入两个基本概念. [线程的并发与并行] 在单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式(大多数是时间片轮巡为主),但无论如何,要通过不断切换需要运行的线程让其运行的方式就叫并发(concurrent).而在多CPU系统中,可以让两个以上的线程同时运行,这种可以同时让两个以上线程同时运行的方式叫做并行(parallel). 在上面包括以后的所有论述中,请各位朋友谅解,我无法用最准确的词语来定义储

多线程学习-基础(十二)生产者消费者模型:wait(),sleep(),notify()实现

一.多线程模型一:生产者消费者模型   (1)模型图:(从网上找的图,清晰明了) (2)生产者消费者模型原理说明: 这个模型核心是围绕着一个"仓库"的概念,生产者消费者都是围绕着:"仓库"来进行操作,一个仓库同时只能被一个生产者线程或一个消费者线程所操作,synchronized锁住的也是这个仓库,仓库是一个容器,所以会有边界值,0和仓库可存放上限,在这个上限内,可以设置多种级别,不同的级别可以执行不同的策略流程. (3)本案例使用知识点: Thread.curre

多线程学习(二)

多线程概念  并发性和并行性  在单个处理器的多线程进程中,处理器可以在线程之间切换执行资源,从而执行并 发. 在共享内存的多处理器环境内的同一个多线程进程中,进程中的每个线程都可以在一 个 单独的处理器上并发运行,从而执行并行.如果进程中的线程数不超过处理器的数 目, 则线程的支持系统和操作环境可确保每个线程在不同的处理器上执行.例如,在 线程数 和处理器数目相同的矩阵乘法中,每个线程和每个处理器都会计算一行结果. 多线程结构一览 传统的UNIX已支持多线程的概念.每个进程都包含一个线程,因此

Java基础教程——线程状态

线程状态 JAVA定义了6种线程状态: Thread.State public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; } 分别是: 新建状态·NEW 运行状态·RUNNABLE 阻塞状态·BLOCKED 无限等待状态·WAITING 休眠状态·TIMED_WAITING 死亡状态·TERMINATED 线程不可能一直运行,除非瞬间执行结束. 为了给其他线程执行的机会,正在执行的线程会被中断

多线程学习笔记四--------------线程间通信问题

线程间通信问题: 多个线程在处理同一资源,但是任务却不同: java中将资源共享的方法(思路): 1.方法或者变量静态化---->静态化后,在类加载的时候,会将其加载到内存的方法区进行共享 2.单例设计模式---->保证只对一个实例进行操作. 3.将资源作为操作该资源的类的构造函数的参数,这样可以保证此类的多个对象在使用该资源的时候使用该资源的同一个实例. 现在我们要用第三种方法来进行线程间的通信. 情景:两个线程 ,一个负责输入,一个负责输出:共同处理一个资源. public class T

java多线程学习(二)——线程的创建

一.java创建线程的两个方法 1.从java.lang.Thread类派生出一个新的线程类,重载它的run()方法 2.实现Runnable接口,重载Runnable接口中的run()方法. 使用Thread类来创建线程和创建普通类的对象的操作是一样的,线程是Thread类或者其子类的实例对象. 二.java提供的两种创建线程的区别 java中类是单继承的,当定义一个新的线程类的时候,它只能扩展一个外部类,那么当创建的线程是继承自Thread类来实现的,那么此线程类无法再扩展其他类,无法实现复

多线程学习-基础(三)线程的调度

一.线程调度(1)调整线程的优先级Java线程有优先级,优先级高的线程会获得较多的执行机会,但是只是抢占cpu使用权的机会增加了,并不意味着就一定先执行.Java线程的优先级用整数来表示,取值范围为:1~10 ,Thread有以下3个静态常量:static int MAX_PRIORITY线程可以具有最高优先级 取值:10static int MIN_PRIORITY线程可以具有最低优先级,取值:1static int NORM_PRIORITY分配给线程的默认优先级,取值:5 Thread类的

Java多线程学习(二)

一.定义产生返回值的任务 在上一篇文的介绍中,我们知道了定义任务通常的方法是定义一个实现Runnable接口的类,这个类被我们成为任务.然而也很容易注意到,任务的最重要的一个方法就是run( )方法,而run( )方法是没有返回值的,也就是说我们之前定义的任务不返回任何值. 如果想要定义一个有返回值的任务,则需要编写一个实现Callable接口的类.Callable是一种具有类型参数的泛型,他的类型参数表示的是call( )方法的返回值类型. 示例如下: 1 import java.util.c

java多线程中synchronize锁的使用和学习,Thread多线程学习(二)

synchronize我的理解是为了保证程序中的原子性和一致性,即当你有两个线程同时操作一段代码的时候,要让这段代码的执行是在任何状态下都是正确的,首先要保证synchronize的使用要对同一个对象和同一把锁使用. [java] view plain copy print? <span style="font-size:14px;">public class TraditionalThreadSynchronized { public static void main(S