【16】线程的状态(线程的生命周期)

(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.打赏鼓励

感谢您的细心阅读,您的鼓励是我写作的不竭动力!!!

2.1微信打赏

在这里插入图片描述

2.2支付宝打赏

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值