sleep(): 此方法用于将当前线程的执行暂停指定的时间(以毫秒为单位)。在这里,Thread 不会失去对监视器的所有权并恢复其执行
wait():此方法在对象类中定义。它告诉调用线程(又名当前线程)等待,直到另一个线程为此对象调用 notify()
或 notifyAll()
方法,线程等待,直到它重新获得监视器的所有权并恢复执行。
wait() | Sleep() |
---|---|
Wait() 方法属于 Object 类。 | Sleep() 方法属于 Thread 类。 |
Wait() 方法在同步期间释放锁定。 | Sleep() 方法在同步期间不会释放对象上的锁。 |
Wait() 应该只从同步上下文中调用。 | 无需从同步上下文调用 sleep()。 |
Wait() 不是一个静态方法。 | Sleep() 是一个静态方法。 |
wait() 有三个重载方法:wait() ,wait(long timeout) ,wait(long timeout, int nanos) |
sleep() 有两个重载方法:sleep(long millis)millis: milliseconds ,sleep(long millis,int nanos) nanos: Nanoseconds |
public final void wait(long timeout) |
public static void sleep(long millis) throws Interrupted_Execption |
sleep()方法示例:
synchronized(monitor)
{
Thread.sleep(1000); Here Lock Is Held By The Current Thread
//after 1000 milliseconds, current thread will wake up, or after we call that is interrupt() method
}
wait()方法示例:
synchronized(monitor)
{
monitor.wait() Here Lock Is Released By Current Thread
}
wait() 和 sleep() 方法之间的相似性:
以下用于调用 wait() 和 sleep() 方法的代码片段:
synchronized(monitor){
while(condition == true)
{
monitor.wait() //releases monitor lock
}
Thread.sleep(100); //puts current thread on Sleep
}
wait() | Sleep() |
---|---|
Wait() 方法属于 Object 类。 | Sleep() 方法属于 Thread 类。 |
Wait() 方法在同步期间释放锁定。 | Sleep() 方法在同步期间不会释放对象上的锁。 |
Wait() 应该只从同步上下文中调用。 | 无需从同步上下文调用 sleep()。 |
Wait() 不是一个静态方法。 | Sleep() 是一个静态方法。 |
wait() 有三个重载方法:wait() ,wait(long timeout) ,wait(long timeout, int nanos) |
sleep() 有两个重载方法:sleep(long millis)millis: milliseconds ,sleep(long millis,int nanos) nanos: Nanoseconds |
public final void wait(long timeout) |
public static void sleep(long millis) throws Interrupted_Execption |
sleep()方法示例:
synchronized(monitor)
{
Thread.sleep(1000); Here Lock Is Held By The Current Thread
//after 1000 milliseconds, current thread will wake up, or after we call that is interrupt() method
}
`
Java
wait()方法示例:
synchronized(monitor)
{
monitor.wait() Here Lock Is Released By Current Thread
}
Java
wait() 和 sleep() 方法之间的相似性:
以下用于调用 wait() 和 sleep() 方法的代码片段:
synchronized(monitor){
while(condition == true)
{
monitor.wait() //releases monitor lock
}
Thread.sleep(100); //puts current thread on Sleep
}
Java
示例2:
// Java program to demonstrate the difference
// between wait and sleep
class GfG{
private static Object LOCK = new Object();
public static void main(String[] args)
throws InterruptedException {
Thread.sleep(1000);
System.out.println("Thread '" + Thread.currentThread().getName() +
"' is woken after sleeping for 1 second");
synchronized (LOCK)
{
LOCK.wait(1000);
System.out.println("Object '" + LOCK + "' is woken after" +
" waiting for 1 second");
}
}
}