Java线程的生命周期

目录

线程的状态

NEW (初始化) 状态

RUNNABLE(可运行)状态

BLOCKED(阻塞)状态

TIMED_WAITING(超时等待)状态

WAITING(等待)状态

TERMINATED(终止)状态

各线程状态的转换图

操作系统中线程的生命周期

操作系统中线程的各种状态之间的转换


线程的状态

线程的生命周期中大体可分为以下6种状态:

1、NEW

2、RUNNABLE

3、BLOCKED

4、WAITING

5、TIMED_WAITING

6、TERMINATED

NEW (初始化) 状态

实列化一个Thread类对象出来(未执行start()方法前),Thread的状态为NEW,类名可以去继承Thread(extends Thread)也可以去实现Runnable接口(implements Runnable)。

RUNNABLE(可运行)状态

调用线程的start()方法,此时线程进入RUNNABLE状态,该状态的线程位于可运行线程池中,等待被操作系统调度,获取CPU的使用权

当获取CPU的时间片时,线程进去运行状态,执行程序代码。

BLOCKED(阻塞)状态

当线程等待获取monitor锁(synchronized)时,线程就会进去BLOCKED状态

注意:

         等待获取monitor锁,线程的状态是BLOCKED

         等待获取LOCK锁(LockSupport.park()),线程的状态是WAITTING。

TIMED_WAITING(超时等待)状态

当执行

Thread.sleep(time);
Thread.join(time);
Object.wait(time);
LockSupport.parkNanos(time);
LockSupport.partUntil(time);

等操作时,线程会从RUNNABLE状态进入TIMED_WAITING状态

当执行超时时间到

Thread.join();
Object.notify/notifyAll();
LockSupprot.unpark();

等线程被中断等操作时,线程会从TIMED_WAITING状态进入RUNNABLE状态

WAITING(等待)状态

当执行Object.wait()、Thread.join()、LockSupport.park()等操作时,线程会从RUNNABLE状态进去WAITING状态

当执行Object.notify/notifyAll()、Thread.join()程序执行完,线程被中断等操作时,线程会从WAITING状态进入到RUNNABLE状态。

TERMINATED(终止)状态

当线程执行完毕、Thread.stop()、内存溢出时,线程就会进入TERMINATED状态

线程一旦死亡,就无法复活。在一个死亡的线程上调用start()方法,会抛出异常。

各线程状态的转换图

 

操作系统中线程的生命周期

线程是处理器任务调度和执行的基本单位

操作系统中线程的状态有5种:

          新建

          就绪

          运行

          阻塞

          终止

操作系统中线程的各种状态之间的转换

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值