Java多线程(二)线程的生命周期

线程的生命周期

    当一个线程被创建并启动以后,它并不是一直处于运行状态,他会有多个状态,在一个线程的生命周期中,总共有五种状态:新建(New),就绪(Runnable),运行(Running),阻塞(Blocked),死亡(Dead)。

我们具体说下线程在不同情况下的状态:
新建状态:
当我们通过new创建线程实例的时候,这个线程就已经除了新建状态;
就绪状态:
当调用线程对象的start()方法以后,线程就从新建状态进入就绪状态,等待系统分配cpu;
运行状态:
当线程获取cpu以后,它就从就绪状态进入了运行状态,但线程不可能一直持有cpu,以下情况会将线程从运行状态转至阻塞状态:
(1) 线程调用了sleep()方法;
(2)线程调用了一个阻塞的io方法,在等待返回值期间,处于阻塞状态;
(3)线程对象获取一个同步监视器,这个同步监视器正在被其他线程占用;
(4)线程对象等待通知(nofity)
(5)线程对象通过suspend()方法挂起,但这种方法有可能导致死锁,应该避免使用;
阻塞状态:
线程处于阻塞状态时,并不会一直保持,还会重新回到就绪状态:
(1) 线程sleep()的时间到了;
(2)线程调用的io方法返回了结果;
(3)线程获取到了同步监视器;
(4)线程在等待通知时,其他线程发出了通知;
(5)线程调用resume()方法恢复;
死亡状态:
线程最终会以三种方式结束,进入死亡状态:
(1) 线程执行体run()或call()执行完毕,线程结束;
(2)抛出了未捕获的Exception或者Error;
(3)调用了线程的stop()方法,有可能导致死锁,避免使用

我们用状态转换图来概括下以下线程的生命周期:


*只有处于新建状态的线程才可以通过start()方法进入就绪状态;
处于死亡状态的线程无法再通过start()方法唤醒,会直接抛出状态异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值