线程的状态

线程中的5个状态:

    1)New         新建状态

               当程序使用new关键字创建了一个线程后,该线程就处于新建状态,此时线程还未启动,当线程对象调用start()方法时,线程启动,进入Runnable状态

    2)Runable   可运行(就绪)状态

               当线程处于Runnable状态时,表示线程准备就绪,等待获取CPU

    3)Running   运行(正在运行)状态

               假如该线程获取了CPU,则进入Running状态,开始执行线程体,即run()方法中的内容

          注意:

               如果系统只有1个CPU,那么在任意时间点则只有1条线程处于Running状态;如果是双核系统,那么同一时间点会有2条线程处于Running状态,但是,当线程数大于处理器数时,依然会是多条线程在同一个CPU上轮换执行

               当一条线程开始运行时,如果它不是一瞬间完成,那么它不可能一直处于Running状态,线程在执行过程中会被中断,目的是让其它线程获得执行的机会,像这样线程调度的策略取决于底层平台。对于抢占式策略的平台而言,系统会给每个可执行的线程一小段时间来处理任务,当该时间段(时间片)用完,系统会剥夺该线程所占资源(CPU),让其他线程获得运行机会。

               调用yield()方法,可以使线程由Running状态进入Runnable状态

    4)Block   阻塞(挂起)状态

               当如下情况下,线程会进入阻塞状态:

               a.线程调用了sleep()方法主动放弃所占CPU资源

               b.线程调用了一个阻塞式IO方法(比如控制台输入方法),在该方法返回前,该线程被阻塞

               当正在执行的线程被阻塞时,其它线程就获得执行机会了。需要注意的是,当阻塞结束时,该线程将进入Runnable状态,而非直接进入Running状态

    5)Dead  死亡状态

               a.当线程的run()方法执行结束,线程进入Dead状态

               b.需要注意的是,不要试图对一个已经死亡的线程调用start()方法,线程死亡后将不能再次作为线程执行,系统会抛出IllegalThreadStateException异常  

线程状态

注:

    1)new运算创建线程后,线程进入New状态(初始状态)

    2)调用start()方法后,线程从New状态进入Runnable状态(就绪状态)

                 start()方法是在main()方法(Running状态)中调用的

    3)线程结束后,进入Dead状态(死亡状态),被对象垃圾回收

    4)main()方法结束后,其它线程,比如上例中p1和p2开始抢着进入Running状态

                 a.由谁抢到是底层操作系统决定(操作系统分配时间片)

                 b.单核处理器:在一个时间点上只有一个线程在Running状态;双核处理器:2个

                 c.如果p1进入Running状态,当操作系统分配给它的时间片到期时,p1进入Runnable状态,p2进入Running状态

                 d.在期间有可能其它的进程的线程获得时间片,那么p1和p2同时进入Runnable状态,等待操作系统分配时间片

                 e.线程进入Dead状态后,只能被垃圾回收,不能再开始

                  f.如果线程在运行过程中,自己调用了yield()方法,则主动有Running状态进入Runnable状态

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值