线程状态转化

一直对线程的状态以及转化流程不太清楚,今天来总结一下

借用网上的一张流程图,大概的转化流程如下,接下来我们来具体说明一下

 (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进入锁池状态,等拿到对象锁后,才能到达可运行状态

说的不合理或不正确的地方,欢迎大家指正,谢谢!

猜你喜欢

转载自blog.csdn.net/sinat_36722750/article/details/82951495
今日推荐