java中sleep()同wait()有什么不同呢?

java-经验王 Java经验 发布时间:2021-11-22 10:54:44 阅读数:14551 1
下文笔者将讲述sleep()同wait()方法的不同点,如下所示:
sleep是线程类(Thread)中的方法
sleep()方法的功能:设置线程暂停指定时间,此时其它线程会运行,等暂停时间到了之,会自动运行
sleep()方法不会释放对象锁
----------------------------------------------------
wait()方法是Object类中的方法
wait()方法的功能:本线程放弃对象锁定,进入等待队列
当我们对此对象运行notify方法(或 notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态
----------------------------------------------------------------------------------------------
sleep()方法退出运行的线程,让出CPU,不释放锁,指定时自动恢复运行
wait()方法暂时退出同步锁,进入等待队列,只有别的线程发出notify方法(或 notifyAll)后 ,wait()方法所处的线程才会得到运行 
例:
package com.java265.other;
publicclass TestClass {
 public static void main(String[] args) { 

    new Thread(newThread1()).start();
        try { 
       Thread.sleep(10);
         } catch (InterruptedException e) { 
         e.printStackTrace();
         } 
    new Thread(newThread2()).start(); 
 } 
 
 private static class  Thread1implements Runnable
 { 

 @Override
 public void run() {
 synchronized (TestClass.class){
 System.out.println("enterthread1...");
 System.out.println("thread1is waiting");
 try { 
      //释放锁有两种方式,第一种方式是程序自然离开监视器的范围
      //也就是离开了 synchronized 关键字管辖的代码范围
      //另一种方式就是在 synchronized 关键字管辖的代码内部调用监视器对象的 wait 方法
      //这里,使用 wait 方法释放锁。
      TestClass.class.wait();
 } catch(InterruptedException e) { 
     e.printStackTrace();
 } 
 
 System.out.println("thread1is going on...");
 System.out.println("thread1is being over!"); 
   } 
 } 
 
 } 
 
 private static class Thread2implements Runnable
 { 
 
 @Override
 public void run() { 
 synchronized (TestClass.class){
     System.out.println("enterthread2...");
     System.out.println("thread2notify other thread can release wait status..");
         //由于 notify 方法并不释放锁
         //即使 thread2调用下面的 sleep 方法休息了10毫秒,但 thread1仍然不会执行,因为 thread2没有释放锁,所以 Thread1无法得不到锁。
 TestClass.class.notify();
 
 System.out.println("thread2is sleeping ten millisecond...");
 try { 
        Thread.sleep(10);
 } catch (InterruptedExceptione) {
  
 e.printStackTrace();
 } 
 
 System.out.println("thread2is going on...");
 System.out.println("thread2is being over!");
 
 } 
 }  
 }  
} 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202111/16375503791787.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者