java线程的生命周期基本概念(无代码)

java线程生命周期

线程状态

  与人有生老病死一样,线程也同样要经历新建、就绪、运行(活动)、阻塞和死亡五种状态都可以通过Thread类中的方法进行控制。

 画图说明:(画图工具画的,有点难看,请自动忽略图形美观)




创建并运行线程

  1.新建状态(New Thread)

     在java语言中使用new操作符创建一个线程后,该线程仅仅是一个空的对象,它具备了线程的一些特征,但此时系统没有为其分配资源,这时的线程处于创建状态。

     线程处于创建状态时,可以通过Thread类的方法来设置线程的各种属性,如线程的优先级(setPriority
)、线程名(setName)和线程的类型(setDaemon)等。

 

  2.就绪状态(Runnable)

   使用start()方法启动一个线程后,系统为该线程分配了除CPU外的所需的资源,该线程处于就绪状态。此外,如果某个线程执行完了yield()方法,那么该线程会被暂时剥夺CPU的资源,重新进入就绪状态。


   3.运行状态

    java运行系统通过调度选中一个处于就绪状态的线程,使其占有CPU并转为运行状态。此时,系统真正执行线程的run()方法。

    可以通过Thread类的isAlive方法来判断线程是否处于就绪/运行状态:当线程处于就绪/运行状态时,isAlive返回true,当isAlive返回false时,可能线程处于阻塞状态,也可能处于停止状态。


  4.阻塞状态

      一个正在运行的线程因为某些原因不能继续运行时,就进入阻塞状态。这些原因包括:

         a.当执行了某个线程对象的sleep()等阻塞类型的方法时,该线程对象会被置入一个阻塞集(Block Pool)内,等待超时而自动苏醒。

         b.当多个线程试图进入某个同步区域(synchronized)时,没能进入该同步区域的线程会被置入锁定区(Lock Pool),直到获得该同步区域的锁,进入就绪状态。

        c.当线程执行了某个对象的wait()方法时,线程会被置入该对象的等待集(Wait Pool)中,直到执行了该对象的notify()方法,wait/notify()方法的执行要求线程首先获取到该对象的锁。


    5.死亡状态

   线程在run()方法执行结束后进入死亡状态。此外,如果线程执行了interrupt()或者stop()方法,那么也会以异常退出的 方式进入死亡状态。

     终止线程的三种方法:

       1.使用退出标志,使线程正常退出,也就是当run()方法完成后线程终止,推荐使用。

       2.使用stop()方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)

       3.使用interrupt方法中断线程。 










    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值