线程的几种状态

时间:2021-04-27 18:15:33

线程的几种状态及状态之间的转化:

线程的几种状态

 

新建状态:

创建一个新的线程(此时线程未启动)

就绪状态:

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

处于就绪状态的线程并不会立即运行run()方法,线程还必须同其他线程竞争CPU时间,只有获取CPU时间才可以运行线程。因为在单CPU的计算机系统中,不可能同时运行多个线程,一个时刻仅有一个线程处于运行状态。因此此时可能有多个线程处于就绪状态。对处于就绪状态的线程是由系统的线程调度程序来调度的。

 

运行状态:

就绪状态的线程获取到CPU,执行程序代码

堵塞状态:

线程因为某些原因放弃CPU的使用权暂停运行,直到线程进入到就绪状态才有可能进入运行状态

堵塞的情况:

1、运行的线程执行了wait()方法,该线程会释放所持有的所有资源,进入堵塞状态

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

3、线程试图得到一个锁,而该锁正在被其他线程持有

4、线程通过调用sleep()方法进入到睡眠状态

结束状态:线程执行完成或者异常退出