zoukankan      html  css  js  c++  java
  • java----wait/notify

    解释

      wait/notify必须配合synchronized使用

    demo

    class NotifyStop2 {
        private final Object lock = new Object();
    
        public void add(String s) throws InterruptedException {
            Thread.sleep(1000);
            synchronized (lock) {
                System.out.println("add notify qian");
                //唤醒其他线程,但是其他线程不能执行,因为lock这把锁,还是被我占用的
                lock.notify();
                System.out.println("add notify hou");
                try {
                    Thread.sleep(5000);
                    System.out.println("add wait qian");
                    //释放lock锁,其他线程可以执行了【使用wait释放锁,或者方法执行完毕,也是释放锁】
                    lock.wait();
                    System.out.println("add wait hou");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
    
        }
    
        public void get() throws InterruptedException {
            synchronized (lock) {
                try {
                    System.out.println("get wait qian");
                    lock.wait();
                    System.out.println("get wait hou");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("get notify qian");
                lock.notify();
                Thread.sleep(5000);
                System.out.println("get notify hou");
            }
        }
    
        public static void main(String[] args) {
            NotifyStop2 notifyStop2 = new NotifyStop2(); //特别注意使用同一个对象进行调用
            new Thread(() -> {
                try {
                    notifyStop2.add("abc");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }, "t1").start();
            new Thread(() -> {
                try {
                    notifyStop2.get();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }, "t2").start();
        }
    }
    

      

  • 相关阅读:
    C#操作符??和?:
    使用Windows8开发Metro风格应用一
    使用Windows8开发Metro风格应用二
    Win8使用技巧
    详解 xls xlst xml 一
    SqlDataAdapter DataSet DataTable 详解
    DataSet 与 xml
    FileTracker : error FTK1011编译错误
    我的CHROME插件
    Komodo升级错误
  • 原文地址:https://www.cnblogs.com/yanxiaoge/p/14375169.html
Copyright © 2011-2022 走看看