wait和sleep的区别
Posted zqlmianshi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wait和sleep的区别相关的知识,希望对你有一定的参考价值。
1.wait就是在门口等,关上了门释放了锁。sleep就是抱着锁睡觉,锁还在我手里。
2.sleep来自thread类,wait来自object类。
3.sleep和wait都需要捕获异常,因为别的方法调用interrupt方法可以打断sleep并报错,如果不捕获就会出错。
4.wait方法用notify()方法唤醒。
5.wait只能在同步代码块内用,sleep可以随处用。
在Java中,wait和sleep都是用来暂停线程的方法,但是它们有着不同的用途和实现方式。
wait方法是Object类的方法,可以用来暂停线程,并且会释放对象锁,使得其他线程可以访问该对象。wait方法必须在synchronized块中调用,否则会抛出IllegalMonitorStateException异常。wait方法可以通过notify或notifyAll方法来唤醒线程。
下面是一个使用wait方法暂停线程的例子:
synchronized(object)
while (!condition)
object.wait();
sleep方法是Thread类的方法,可以用来暂停线程,但是不会释放对象锁。sleep方法可以在任何地方调用,不需要在synchronized块中。sleep方法会让线程进入阻塞状态,直到时间到了或者被中断才会返回。
下面是一个使用sleep方法暂停线程的例子:
try
Thread.sleep(1000);
catch (InterruptedException e)
// handle the exception
总的来说,wait和sleep的区别如下:
-
wait方法必须在synchronized块中调用,而sleep方法可以在任何地方调用。
-
wait方法会释放对象锁,而sleep方法不会释放对象锁。
-
wait方法可以通过notify或notifyAll方法来唤醒线程,而sleep方法只能等待时间到了或者被中断才会返回。
需要注意的是,在使用wait和sleep时,需要处理InterruptedException异常,以便于及时中断线程。
使用wait方法时也需要处理InterruptedException异常。因为在等待期间,线程可能会被中断,如果不处理这个异常,可能会导致应用程序出现问题。在使用wait方法时,可以使用以下代码来处理InterruptedException异常:
synchronized(object)
while (!condition)
try
object.wait();
catch (InterruptedException e)
// handle the exception
当线程在wait状态下被中断时,会抛出InterruptedException异常,程序可以在catch块中处理这个异常,比如打印日志、设置标志位等操作。处理完异常后,线程会继续执行while循环,重新检查condition条件是否满足。
wait方法也会响应interrupt()方法,并在收到中断信号后抛出InterruptedException异常。当线程处于wait状态时,如果其他线程调用了该线程的interrupt()方法,那么该线程会被唤醒并抛出InterruptedException异常。
需要注意的是,当线程抛出InterruptedException异常时,它的中断状态会被清除。因此,在catch块中需要手动重置中断状态,以允许其他线程继续中断该线程。以下是一个使用wait方法响应interrupt()方法的示例代码:
synchronized(object)
while (!condition)
try
object.wait();
catch (InterruptedException e)
Thread.currentThread().interrupt(); // 重置中断状态
// handle the exception
在catch块中,我们首先重置了中断状态,然后再处理异常。这样做可以确保在异常处理完成后,线程的中断状态能够被其他线程正确处理。
sleep() 和 wait() 区别
sleep()不释放同步锁,wait()释放同步锁
sleep()的作用是让线程休眠指定的时间,时间到后自动恢复线程执行。运行的主动权是由线程决定的。
wait()可以用notify()直接唤起,运行的主动权在于控制者。
sleep()是Thread的静态方法;
wait()是OBJ的静态方法,Object.wait();Object.notify();
以上是关于wait和sleep的区别的主要内容,如果未能解决你的问题,请参考以下文章