话说线程的四种暂停状态

      对于线程对象,如果想让其暂时停止,但是恢复运行后又不至于产生一个新的线程对象时,就需要知道如何让线程处于暂停状态了。在java语言中,可通过如下四种方式来实现该功能:

     

      1、sleep()方法

          sleep的中文意思是“睡觉”,其主要用来实现让Thread对象“睡觉”,不过在睡觉时设置了一个“闹钟”,时间一到就会恢复到运行就绪态。代码格式为:

                 Thread.sleep(long millis);          

                 //参数millis用于表示睡眠时间,其单位是千分之一秒,故欲设置sleep 1秒的话,此参数为1000

           注:当一个Thread类对象被唤醒后,并非直接进入running状态运行,而是先进入runnable状态等待cpu的调用。

   

     2、yield()方法

           对于sleep()方法,线程在指定的时间里肯定不会由running状态转换至runnable状态;而对于yield()方法,线程可能马上由running状态转换至runnable状态。代码格式为:

                  Thread.yield();

           对于一个Thread类对象,如果想让其立即由running状态转换至runnable状态,即立即暂停停止运行,可以调用yield()方法。当调用yield()方法时,会使得cpu从当前的线程对象切换到其他的线程对象。


     3、join()方法

           当处于runnable状态的线程有多个时,如果线程1需要等待线程2完成某件事后,其才能继续执行下去,这是就需要用到join()方法。代码格式为:

                  Thread.join();

     

     4、wait()方法    

            wait的中文意思是“等待”,其主要用来实现让线程进入等待状态,该方法有两种使用方式:

                    (1)Thread.wait(long millis);        //参数millis用来表示等待时间

                    (2)Thread.wait();

            wait()方法一般会与notify()方法配合使用,wait()让线程无限等待直到接收到notify()或notifyAll()方法为止。

                 wait()方法和join()方法类似,对于join()方法,线程1需要等待线程2完成某件事(运行完毕,自然死亡)后才能自动继续执行下去。而对于wait()方法,同上的线程1和线程2间关系,当线程2完成后必须调用notify()方法来唤醒线程1,才能使线程1继续执行。


            (扩展)与sleep()、yield()和join()方法不同,方法wait()、notify()和notifyAll()都是java.lang.Object类的方法,所以任何对象都可以调用这3个方法。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值