(1)一个人只要自己不放弃自己,整个世界也不会放弃你.
(2)天生我才必有大用
(3)不能忍受学习之苦就一定要忍受生活之苦,这是多么痛苦而深刻的领悟.
(4)做难事必有所得
(5)精神乃真正的刀锋
(6)战胜对手有两次,第一次在内心中.
(7)好好活就是做有意义的事情.
(8)亡羊补牢,为时未晚
(9)科技领域,没有捷径与投机取巧。
(10)有实力,一年365天都是应聘的旺季,没实力,天天都是应聘的淡季。
(11)基础不牢,地动天摇
(12)写博客初心:成长自己,辅助他人。当某一天离开人世,希望博客中的思想还能帮人指引方向.
(13)编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~
线程的状态(线程的生命周期)
文章目录
1线程的6种基本状态
1.1初始
(1)new 出了一个新的线程对象。
(2)并不代表这个线程就真正执行了,调用了start()方法以后才真正执行。
1.2运行
(1)线程对象调用了start()方法以后进入运行状态。
1.2.1运行中running态
如果当前线程对象被分配了时间片,拿到了CPU,它就处于运行中。
1.2.2就绪(ready)
如果当前线程对象被分配的CPU时间片用完了,或者因为某种原因被操作系统剥夺了,当前线程就进入一个就绪状态。
1.3终止(terminated)
(1)运行完了,马上进入终止状态,这是主要的生命周期。
(2)随着调用各种并发编程的方法,线程还有可能在多个线程状态中进行切换。
1.4等待(waiting)
(1)当我们调用了wait()方法,使我们当前线程进入一个等待,这个时候线程就进入等待状态。
(2)如何由等待状态切回运行状态呢?
调用notify()方法或者notifyAll()方法都会让我们的线程从等待状态进入一个运行状态。
1.5等待超时(timed_waiting)
(1)线程对象调用wait()方法不带时间戳,它会一直等,如果带了时间戳,指定了一个时间长度,时间到了,哪怕是没有人唤醒我,我自己也从等待当中恢复到一个就续状态,或者说恢复到一个运行态。
1.6阻塞(blocked)
(1)指的是我们当前的线程调用了同步方法,即调用了synchronized关键字修饰的代码块或者是方法的时候,如果它没有拿到锁,这个时候它就进入到一个阻塞态。
(2)什么时候从阻塞态恢复呢?
线程对象重新获取到锁之后,重新进入到运行状态中。
1.7提问
(1)线程对象调用sleep()进入什么状态?
进入等待或者等待超时状态。
(2)如果调用显示锁里面的lock()方法,没有拿到锁,这个时候,我当前线程是应该进入阻塞态吗?
-
一个系统进入阻塞态的话,有且仅有调用synchronized关键字的方法或代码块的时候,才会进入阻塞态。
-
lock()方法这种显示锁,它在底层实现的时候,用的是LockSupport,所以调用这个方法之后,线程进入的是等待或者是等待超时状态,并不是阻塞态。
-
阻塞是被迫进入,而等待是主动进入。
(3)把运行中与就绪态合二为一,是java里面规定的,在操作系统级别来看,会分得更细,严格意义上是两种状态。
2.打赏鼓励
感谢您的细心阅读,您的鼓励是我写作的不竭动力!!!