sleep和wait方法的区别
1,sleep是Thread的方法,wait是Object的方法
2,sleep不会释放锁,但是wait会释放锁,并且会添加到waiting queue
3,sleep不需要同步,但是wait需要
4,sleep不需要唤醒,但是wait需要
import java.util.stream.Stream;
public class DiffOfSleepAndWait {
private static final Object LOCK = new Object();
public static void main(String[] args) {
Stream.of("T1", "T2").forEach(name ->
new Thread(name) {
@Override
public void run() {
//DiffOfSleepAndWait.method1();
DiffOfSleepAndWait.method2();
}
}.start()
);
}
public static void method1() {
synchronized (LOCK) {
try {
System.out.println("The thread " + Thread.currentThread().getName() + " enter");
Thread.sleep(20000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void method2() {
synchronized (LOCK) {
try {
System.out.println("The thread " + Thread.currentThread().getName() + " enter");
LOCK.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
分别执行method1和method2方法,会看到很明显的效果。