Java中的wait()和sleep()方法之间的区别

sleep()Java中的wait()和方法

首先,我们将看到怎样wait()的方法不同于sleep()方法的Java?

wait()方法

  • 此方法在java.lang包中可用。

  • 此方法用于暂停Java中的线程。

  • 此方法在Object类中定义。

  • 此方法在等待时释放监视器或获得该监视器的锁定。

  • wait()是一个非静态方法(即实例方法),因此可以在对象类的帮助下访问此方法。

  • 让我们假设,如果我们的线程正在等待执行,那么它在一种情况下被唤醒的是,当其他线程在同一对象上调用notify()notifyAll()方法时。

  • 此方法对于线程间通信很有用。

  • 在使用wait()方法的情况下,等待线程不会直接进入Runnable状态(即,如果等待线程唤醒,则它首先获取了锁,然后进入Runnable状态)

  • 仅从同步上下文调用此方法(即,我们可以从syncize方法或synced块调用此方法)。

  • 如果使用wait()方法,则等待线程将一直等到条件为真(基于条件)。

  • 该方法的语法如下:

    final void wait(){}
    final void wait(long ms, int ns){}
    final void wait(long ms){}
  • 此方法是重载方法,因此我们将看到下面给出的所有变化,

    1. wait()
      此方法使当前线程等待,直到另一个线程通过调用对象的notify()或notifyAll()方法获得通知。

    2. wait(long ms)
      此方法使当前线程等待指定的时间,直到通过调用对象的notify()或notifyAll()方法通知另一个线程为止。

    3. wait(long ms,int ns)
      此方法使当前线程等待指定的时间(以毫秒和纳秒为单位),直到通过调用对象的notify()或notifyAll()方法发出另一个线程通知为止。

  • 如果我们要等待某个条件,就应该使用wait()方法。

  •   

其次,我们将看到怎样sleep()的方法上不同于wait()在Java方法?

sleep()方法

  • 此方法在java.lang包中可用。

  • 此方法用于在Java中将线程暂停一小段时间。

  • 此方法在Thread类中定义。

  • 当线程正在等待时,此方法不会释放监视器或对该对象的获取锁定。

  • sleep()是静态方法(即类方法),因此可以使用Classname访问此方法。

  • 假设我们的线程正在等待执行,因此它不会在条件下唤醒(即,我们不需要调用notify()notifyAll()方法来唤醒)。

  • 当线程想要短时间等待或休眠时,此方法很有用。

  • 如果使用sleep()方法,则睡眠线程直接进入Runnable状态(即,如果睡眠线程唤醒,则不需要获取锁)。

  • 该方法将从非同步上下文中调用(即,我们可以从非同步方法或块中调用此方法)。

  • 对于sleep()方法,睡眠线程将等待特定的持续时间。

  • 该方法的语法如下:

    static void sleep(long ms){}
    static void sleep(long ms, int ns){}
  • 此方法是重载方法,因此我们将看到下面给出的所有变化,

    1. sleep(long ms)
      此方法适用于我们要在特定时间段内停止当前执行的线程(以毫秒为单位)的情况,换句话说,如果某个线程导致当前线程在该方法中指定的毫秒内停止执行一段时间。

    2. sleep(long ms,int ns)
      此方法适用于当我们想要在毫秒(毫秒)+纳秒(即,以毫秒为单位的额外时间)内停止特定时间段的当前执行线程时,或者换句话说,如果某个线程导致当前线程停止执行该方法中指定的毫秒+纳秒的时间。

  • 如果我们要等待一定的时间,我们应该使用sleep()方法。