wait 和 sleep 用于线程控制:
-
使用的位置:
wait方法是 Object 类的方法,因此它可以在任何对象上调用,前提是线程必须拥有该对象的锁。通常,wait被用于线程间的协作。sleep方法是 Thread 类的静态方法,可以直接在任何地方使用,不需要拥有对象的锁。通常,sleep被用于线程的时间暂停。
-
锁的释放:
- 在调用
wait方法后,线程会释放对象的锁,使得其他线程可以获得这个对象的锁并执行。当等待条件满足时,线程可以被唤醒。 - 在调用
sleep方法后,线程仍然持有对象的锁,其他线程无法获取锁。
- 在调用
-
异常处理:
wait方法需要在同步块或同步方法中使用,通常结合try-catch块使用,以处理中断异常和超时等待。sleep方法也需要处理中断异常,因为在睡眠期间线程可以被其他线程中断。
-
调用方式:
wait方法通常与notify或notifyAll方法一起使用,以实现线程间的通信和协作。sleep方法通常用于在程序执行中暂停执行一段时间。
总体而言,wait 主要用于线程间的协作,而 sleep 主要用于线程的时间暂停。