Java 多线程基础-线程状态

线程从创建到消亡,一直处于线程的五种状态之一,如图:
这里写图片描述
1.新建(New):
通过诸如new Thread(() ->{});这样的方式,创建一个新的线程后,线程处于新建状态下,等待被启动
2.就绪(Runnable):
以下情况中线程将会进入就绪状态:

  1. 当线程的start()方法被调用时,start()方法创建线程运行的系统级资源
  2. Blocked Pool中的阻塞线程阻塞超时,自动进入就绪状态
  3. 调用线程resume()方法,唤醒线程
  4. 调用线程notify()方法,唤醒线程

3.运行(Running):
当线程被start()方法启动,或从阻塞状态中唤醒后,并不会立即执行,只有当CPU为线程分配了时间片,才会进入运行状态,当时间片消耗完毕,如果线程的run()方法仍未执行完毕,线程会进入阻塞状态,如果run()方法执行完毕,线程死亡
4.阻塞(Blocked):
阻塞状态的线程大致可以分为两种状态:
4.1.Wait Pool:
wait()方法继承自Object类,调用对象的wait()方法,会使线程放弃当前对象锁,暂停执行并进入Wait Pool,只有调用notify()/notifyAll()方法,线程才会被唤醒,进入Lock Pool,当线程重新获取对象锁,线程进入就绪状态
4.2.Blocked Pool
sleep(long)方法会令线程暂停执行指定的时间,并且依然持有对象锁,当休眠时间结束后,线程会自动回到就绪状态.
5.死亡(Dead):
5.1.当线程的run()方法执行完毕,线程就会自然地进入死亡状态
5.2.当线程的run()方法发送一个未捕获的异常,或者Thread执行了其stop()方法(不安全,过时方法),或Thread的interrupt()方法,将会终止线程的执行.值得注意的是,即使是用于取代stop()方法的interrupt()方法,仍然存在一定的问题.
线程提供了一个方法isAlive()判断线程是否还存活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值