基本差别
sleep是Thread类的方法,wait是Object类中定义的方法
sleep()方法可以在任何地方使用
wait()方法只能在synchronized方法或synchronized块中使用
本质区别
Thread.sleep智慧让出CPU,不会导致锁行为的改变
Object.wait不仅让出CPU,还会释放已经占有的同步资源锁
public class ThreadWaitSleep {
public static void main(String[] args) {
final Object lock = new Object();
new Thread(new Runnable() {
public void run() {
System.out.println("线程A正在等待获取锁");
synchronized (lock) {
try {
System.out.println("线程A得到锁");
Thread.sleep(20);
System.out.println("线程A等待");
lock.wait(1000);
System.out.println("线程A走完");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).start();
//睡10ms保证能进入线程A
try {
Thread.sleep(10);
} catch (Exception e) {
e.printStackTrace();
}
new Thread(new Runnable() {
public void run() {
System.out.println("线程B正在等待获取锁");
synchronized (lock) {
try {
System.out.println("线程B获得锁");
System.out.println("线程B睡10ms");
Thread.sleep(10);
System.out.println("线程B走完");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).start();
}
}
执行结果为:
线程A正在等待获取锁
线程A得到锁
线程B正在等待获取锁
线程A等待
线程B获得锁
线程B睡10ms
线程B走完
线程A走完
原文链接:https://blog.csdn.net/l_learning/article/details/89006355
网友评论