目录
线程的状态
线程的生命周期中大体可分为以下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种:
新建
就绪
运行
阻塞
终止
操作系统中线程的各种状态之间的转换

2213

被折叠的 条评论
为什么被折叠?



