美文网首页
sleep()跟wait()的基本差别

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

作者: 大道至简_6a43 | 来源:发表于2020-04-04 18:52 被阅读0次

基本差别

    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

相关文章

网友评论

      本文标题:sleep()跟wait()的基本差别

      本文链接:https://www.haomeiwen.com/subject/mrxsphtx.html