zoukankan      html  css  js  c++  java
  • sleep 和 wait 区别

    public class Test {
        private static final Object obj = new Object();
    
        public static void main(String[] args) {
    
            new Thread( ()-> {
                synchronized (obj){ // 尝试获取锁
                    // 1
                    System.out.println("线程1获取到锁");
                    try {
                        // 2
                        System.out.println("线程1 wait [释放锁]");
                        obj.wait(); // wait() [会释放锁],如果没有再次获取到 list 锁,就会一直等下去
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    // 3
                    System.out.println("线程1再次获取到锁");
                    // 4
                    System.out.println("线程1结束");
                }
            }).start();
    
            new Thread( ()-> {
                synchronized (obj){ // 尝试获取锁,如果获取失败,就不会进入线程体
                    // 1
                    System.out.println("线程2获取到锁");
                    try {
                        // 2
                        System.out.println("线程2休眠2秒,不会释放锁");
                        Thread.sleep(2000); // 休眠,不会释放锁
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    // 3
                    System.out.println("线程2 notify , 唤醒线程1[释放锁]");
                    obj.notify(); // 唤醒处于等待 list 锁的线程 [会释放锁]
                    // 4
                    System.out.println("线程2结束");
                }
            }).start();
    
        }
    }
  • 相关阅读:
    2
    1
    Hadoop集群常见报错汇总
    Kerberos常见报错汇总
    Python软件包管理工具pip实战篇
    Python软件包及环境管理器conda实战篇
    Python的Virtualenv与Venv环境管理器
    Python的编辑工具-Jupyter notebook实战案例
    文档工具GitBook使用指南
    20200912
  • 原文地址:https://www.cnblogs.com/huanggy/p/10910925.html
Copyright © 2011-2022 走看看