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();
    
        }
    }
  • 相关阅读:
    strncat_s
    资源编译器 (.rc) 文件
    C++ Namespace 详解
    Structure Definitions
    SetParent
    C++笔记(1)explicit构造函数
    .def
    tellg()和tellp()
    Data Groups
    Messages
  • 原文地址:https://www.cnblogs.com/huanggy/p/10910925.html
Copyright © 2011-2022 走看看