sleep(long n) 和 wait(long n) 的区别:
sleep是Thread方法,而wait是Object的方法
sleep不需要强制和synchronized配合使用,但wait需要和synchronized一起使用
sleep在睡眠的同时,不会释放对象锁,但wait在等待的时候会释放对象锁。
它们的状态都是TIMED_WAITING
public class WaitAndSleep {
static final Object lock = new Object();
public static void main(String[] args) throws InterruptedException {
//第三点的证明
new Thread(() -> {
synchronized (lock) {
System.out.println("t1线程获得锁");
try {
Thread.sleep(20 *1000);
//lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "t1").start();
Thread.sleep(1);
synchronized (lock) {
System.out.println("主线程获得锁");
}
}