zoukankan      html  css  js  c++  java
  • java wait(),notify(),notifyAll()

    1. wait()的作用是使当前执行代码的线程进行等待,此方法是Object类的方法,该方法用来将当前线程置入“预执行队列”中,并且在wait()所带的代码处停止执行,直到接到通知或被中断位置。在调用wait()方法前线程必须获得该对象的对象级别锁,即只能在同步方法或同步块中调用wait()方法。
    2. notify()也要在同步方法或同步块中调用,即在调用前,线程也必须获得该对象的对象级别锁。该方法用来通知那些可能等待该对象的对象锁的其他线程,如果有多个线程等待,则由线程规划器随机挑选出其中一个wait状态的线程,对其发出notify通知。在执行notify()方法后,当前线程不会马上释放该对象锁,呈wait状态的线程也并不能马上获取该对象锁,要等到执行notify()方法的线程将程序执行完,也就是退出synchronized代码块后才会释放锁。
    3. notifyAll()方法是唤醒全部线程。
    4. wait(long) 带一个参数的方法是等待某一时间内是否有线程对锁进行唤醒,如果超过这个时间则自动唤醒.

    实例代码:

    package com.test;
    
    public class MyThread1 extends Thread {
        private Object lock;
        public MyThread1(Object lock) {
            this.lock = lock;
        }
        
        @Override
        public void run() {
            try {
                synchronized (lock) {
                    System.out.println("开始  wait time=" + System.currentTimeMillis());
                    lock.wait();
                    System.out.println("结束  wait time=" + System.currentTimeMillis());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    package com.test;
    
    public class MyThread2 extends Thread {
        private Object lock;
        public MyThread2(Object lock) {
            this.lock = lock;
        }
        
        @Override
        public void run() {
            synchronized (lock) {
                System.out.println("开始 notify time=" + System.currentTimeMillis());
                lock.notify();
                System.out.println("结束 notify time=" + System.currentTimeMillis());
            }
        }
    }
    package com.test;
    
    public class Run {
        
        public static void main(String[] args) {
            
            try {
                Object lock = new Object();
                MyThread1 t1 = new MyThread1(lock);
                t1.start();
                Thread.sleep(3000);
                MyThread2 t2 = new MyThread2(lock);
                t2.start();
                    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    运行结果:
    开始  wait time=1527763145089
    开始 notify time=1527763148090
    结束 notify time=1527763148090
    结束  wait time=1527763148090
  • 相关阅读:
    hdu 3666 差分约束系统
    hdu 1198农田灌溉
    常微分方程(阿諾爾德) Page 45 相空間,相流,運動,相曲線 註記
    高等微積分(高木貞治) 1.4節 例2
    常微分方程(阿諾爾德) Page 45 相空間,相流,運動,相曲線 註記
    解析函數論 Page 29 命題(2) 函數模的有界性
    高等微積分(高木貞治) 1.4節 例2
    解析函數論 Page 29 命題(1) 有界閉集上的一致連續性
    解析函數論 Page 29 命題(3) 模的下界的可達性
    解析函數論 Page 29 命題(2) 函數模的有界性
  • 原文地址:https://www.cnblogs.com/gouge/p/9118388.html
Copyright © 2011-2022 走看看