线程的几种状态及状态之间的转化:
新建状态:
创建一个新的线程(此时线程未启动)
就绪状态:
一个新建的线程并不会自动开始运行,要执行线程,必须调用线程的start()方法,当线程对象调用start()方法启动了线程,start()方法创建线程运行的系统资源,并调度线程运行run()方法,当start()方法返回后,线程就处于就绪状态
处于就绪状态的线程并不会立即运行run()方法,线程还必须同其他线程竞争CPU时间,只有获取CPU时间才可以运行线程。因为在单CPU的计算机系统中,不可能同时运行多个线程,一个时刻仅有一个线程处于运行状态。因此此时可能有多个线程处于就绪状态。对处于就绪状态的线程是由系统的线程调度程序来调度的。
运行状态:
就绪状态的线程获取到CPU,执行程序代码
堵塞状态:
线程因为某些原因放弃CPU的使用权暂停运行,直到线程进入到就绪状态才有可能进入运行状态
堵塞的情况:
1、运行的线程执行了wait()方法,该线程会释放所持有的所有资源,进入堵塞状态
2、线程调用一个在I/O上被堵塞的一个操作,即该操作在输入输出操作完成之前不会返回
3、线程试图得到一个锁,而该锁正在被其他线程持有
4、线程通过调用sleep()方法进入到睡眠状态
结束状态:线程执行完成或者异常退出