多线程的执行流程、线程状态和生命周期

 

 

一个线程对象在他的生命周期内需要经历过五个状态

        首先是新生状态,用new关键字建立一个线程后,该线程就处于一个新生的状态。处于新生状态的线程有自己的内存空间,通过start()方法进入就绪状态

        然后就是就绪状态,就绪状态的线程已经具备了运行的条件,但是还没有分配到CPU,处于‘线程就绪队列’,等待系统为其分配CPU,线程就进入运行状态并自动调用自己的run()方法。有四种原因导致线程进入到就绪的状态:

  1. 新建线程:调用start()方法,进入就绪状态
  2. 阻塞线程:阻塞接触进入就绪状态
  3. 运行线程:调用yield()方法,直接进入就绪状态;
  4. 运行线程:JVM将CPU资源从本线程切换到其他线程

        运行状态:在运行状态的线程执行自己在run()方法中的代码,直到调用其他方法而终止或等待某资源而阻塞或完成任务而死亡。如果在给定的时间片内没有执行结束,就会被系统给换下来回到就绪状态。也可能由于某些‘导致阻塞的事件’而进入到阻塞状态。

        阻塞状态:阻塞时暂停一个线程的执行以等待某个条件的发生,有四种原因会导致阻塞

  1. 执行sleep(int millsecond)方法,让当前的线程进入到休眠,进入到阻塞状态。当指定的时间到了,线程进入到就绪状态
  2. 执行waite()方法,使当前的线程进入到阻塞的状态。当使用到nofity()方法唤醒这个线程后进入到就绪 的状态。
  3. 线程运行时,某个操作进入到阻塞的状态,比如IO操作(write/read)方法本身就是阻塞的方法
  4. join()线程的联合:当某个线程等待另外一个线程执行结束后,菜继续执行时,使用join()方法

        死亡状态(Terminated):死亡状态是线程生命周期中的最后一个阶段。线程死亡的原因有两个。一个是正常运行的线程完成了它run()方法内的全部工作; 另一个是线程被强制终止,如通过执行stop()或destroy()方法来终止一个线程(注:stop()/destroy()方法已经被JDK废弃,不推荐使用)。当一个线程进入死亡状态以后,就不能再回到其它状态了。

         

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值