sleep()跟wait()的基本差别

2020-04-04  本文已影响0人  大道至简_6a43

基本差别

    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

上一篇 下一篇

猜你喜欢

热点阅读