美文网首页
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