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();
    
        }
    }
  • 相关阅读:
    SDN第4次上机作业
    SDN第三次作业
    SDN第三次上机作业
    SDN第二次上机作业
    SND第二次作业
    【Beta Scrum】冲刺!4/5
    【Beta Scrum】冲刺! 3/5
    【Beta Scrum】冲刺! 2/5
    【Beta Scrum】冲刺! 1/5
    SDN第二次上机作业
  • 原文地址:https://www.cnblogs.com/huanggy/p/10910925.html
Copyright © 2011-2022 走看看