【多线程】线程的生命周期

生命周期的五种状态

这里写图片描述

  • 新建(new Thread):
    当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动),此时系统还没有为其分配资源。
    例如:Thread t1=new Thread();
    通过Thread类的方法,可以设置线程的优先级(setPrioriry)、线程名(setName)、线程类型(setDaemon)。

  • 就绪(runnable):线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。例如:t1.start();
    如果某线程执行了yield()方法,那么该线程会被暂时剥夺CPU资源,重新进入就绪状态。

  • 运行(running):线程获得CPU资源正在执行任务(run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。
    通过使用Thread类的isAlive方法,可以判断线程状态,true代表线程处于就绪或运行状态,false表示线程处于阻塞或停止状态

  • 死亡(dead):当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。

    • 自然终止:正常运行run()方法后终止
    • 异常终止:调用stop()方法或interrupt()方法让一个线程终止运行
  • 阻塞(blocked):
    由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。

    • 正在睡眠:用sleep(long t) 方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。
    • 当多个线程视图进入某个同步区域时,没能进入该同步区域的线程将会被置入锁定集(Lock Pool),知道获得该同步区域的锁。进入就绪。
    • 正在等待:调用wait()方法的对象将会进入阻塞状态。调用motify()方法回到就绪状态。调用上述方法时要求线程首先获取到该对象的锁。

终止线程的三种方法:
- 使用退出标志,使线程正常退出,也就是方run方法完成后线程终止,推荐使用
- 使用stop方法强行终止(不推荐,可能发生不可预料的结果)
- 使用interrupt方法中断线程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值