本文共 614 字,大约阅读时间需要 2 分钟。
一直对线程的状态以及转化流程不太清楚,今天来总结一下
借用网上的一张流程图,大概的转化流程如下,接下来我们来具体说明一下
(1)初始状态:我们创建线程的方法有继承Thread和实现Runnable,Callable接口这三种方法,当创建完成这时的状态就是初始状态
(2)可运行状态:当我们调用线程的start方法,就会从初始态转化为可运行状态(就绪状态)
(3)运行状态:可运行态的线程,得到CPU的调度时,就会转化为运行状态,当我们进入运行状态是情况就会变得有些复杂了
(4)终止状态:最好的结果就是run()执行结束
(5)阻塞状态:从运行态进入阻塞状态,当我们的线程需要等待用户输入,或者调用了sleep()和join()方法,那么就会进入阻塞状态,直至用户输入完成,或者sleep()时间到,join的另外一个线程结束,那么就会又进入可运行状态
(6)从运行态再次返回到可运行态:这种现象是当前线程的时间片用完,或者调用了yield()方法
(7)等待队列:从运行态进入等待队列,是在运行态调用了Object的wait()方法,然后进入等待队列,但是必须由Object的notify()或notifyAll()来唤醒线程进入锁池状态,拿到对象的锁标记才能够才回到可运行状态
(8)锁池状态:也可直接由synchronized进入锁池状态,等拿到对象锁后,才能到达可运行状态
说的不合理或不正确的地方,欢迎大家指正,谢谢!