java 线程状态转换_Java多线程-线程状态的转换

本文详细介绍了进程和线程的概念,强调线程作为进程内的执行路径,以及多线程的执行机制。线程的状态包括新建、就绪、运行、阻塞和死亡,每个状态的转换说明了线程的生命周期。Java中的线程调度采用抢占式算法,确保线程的执行。理解这些基础知识对于理解和优化多线程程序至关重要。
摘要由CSDN通过智能技术生成

进程是一个正在执行的程序,每个进程都有自己的执行顺序,和执行路径,或者叫控制单元;而线程就是进程里面的执行路径,每个进程里面至少有一个线程,两个线程或两个以上的线程则称为多线程;而多线程的执行是靠争取CPU的执行权力,一个CPU只能执行一个线程,只不过是切换的快,我们所看到的是一块执行;多线程是多个代码同时执行。

线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、堵塞状态以及死亡状态

1、新建(new)

当用New操作符创建一个线程时,例如 new Thread(r),线程还没开始运行,此时线程处于新建状态。当一个线程处于新生状态时,程序还没有开始运行线程中的代码。

2、就绪(runnable)

一个新创建的线程并不会自动开始运行,要执行线程必须调用线程的start()方法。当线程对象调用了start()方法之后,即启动了线程,start()方法创建线程运行的系统资源,并调度线程运行run()方法。当start()方法返回后,线程就会进入到就绪状态。

线程进入到就绪状态并不一定会立即执行run()方法,线程必须同其他线程进行竞争CPU时间,获取时间片,这有这样才能运行。因为在单CPU的计算机系统中,不能同时运行多个线程,一个时刻只有一个线程处于运行状态。这里Java采用的是抢占式的调度算法

3、运行状态(running)

当线程获取CPU时间后,它才进入运行状态,真正开始执行run()方法

4、阻塞状态(Blocked)

1):线程通过调用sleep方法进入睡眠状态

2):线程调用一个在I/O上被堵塞的操作,即该操作在输入输出完成之前不会返回到它的调用者

3):线程试图获取一个锁,而该锁正在被其他线程持有

4):线程正在等待某个触发条件

总而言之,堵塞状态就是正在运行的线程没有运行结束,暂时让出CPU,这时其他处于就绪状态的线程就会获得CPU时间,进入运行状态

5、死亡(dead)

1):run方法正常退出而自然死亡

2):一个未捕获的异常中止了run方法的运行而使线程猝死

?

20190305151408918.png

?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值