- sleep是Thread方法,而wait是Object的方法
- sleep不需要强制和synchronized配合使用,但wait需要和synchronized一起用
- sleep在睡眠的同时,不会释放对象锁,但wait在等待的时候会释放对象锁
进入的状态是一致的,都是【TIME-WAITING】,这里是针对wait含参方法来说的,无参方法是【WAITING】状态
wait会释放锁:
```java public class SleepAndWait {
static final Object lock = new Object();
public static void main(String[] args) {
new Thread(()->{
System.out.println("获得锁");
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
},"t1").start();
synchronized (lock){
System.out.println("获得锁");
}
} }
<a name="ihyZW"></a>
####
<a name="RZJ5q"></a>
#### sleep不会释放锁:
```java
public class SleepAndWait {
static final Object lock = new Object();
public static void main(String[] args) {
new Thread(()->{
System.out.println("获得锁");
try {
Thread.sleep(20000);
} catch (InterruptedException e) {
e.printStackTrace();
}
},"t1").start();
synchronized (lock){
System.out.println("获得锁");
}
}
}