在Java中sleep 和 wait之间的区别

时间:2020-02-23 14:34:07  来源:igfitidea点击:

在Java中睡眠和等待之间有什么区别

sleep

  • 它导致电流执行线程以睡眠特定的时间。
  • 其准确性取决于系统定时器和调度员。
  • 它一直留给 monitors它已获取,因此如果从同步上下文调用,则没有其他线程可以输入该块或者方法。
  • 如果我们调用 interrupt()方法,它会唤醒睡眠线程。
synchronized(lockedObject) {   
      Thread.sleep(1000); //It does not release the lock on lockedObject.
      //So either after 1000 miliseconds, current thread will wake up, or after we call 
      //t. interrupt() method.
      
  }

wait

  • 它导致当前线程等待直到另一个线程调用此对象的Notify()方法或者NotifyAll()方法
  • 它必须从 synchronized例如:从块或者方法。它在等待()方法之前的方法,当前线程必须在该对象上锁定。
  • 它将锁定在调用并添加到等待列表中的对象上的锁定,因此另一个线程可以在对象上获取锁定。
synchronized(lockedObject) {   
   lockedObject.wait(); //It releases the lock on lockedObject.
      //So until we call notify() or notifyAll() from other thread,It will
   //not wake up
      
  }

睡眠vs等待:

比较项waitsleep
同步等待应该从同步上下文调用:从块或者方法,如果我们不使用同步上下文调用它,它将抛出IllegalMonitorTateException不需要从同步块或者方法调用
调用wait方法在对象上运行并在对象类中定义sleep 方法在当前线程上运行,在java.lang.thread
释放锁wait调用对象的释放锁和对象持有其他锁睡眠方法根本不释放锁
唤醒条件直到调用notify()或notifyAll()from Object类。直到时间到期或调用中断()
静态wait是非静态方法sleep是静态方法