zoukankan      html  css  js  c++  java
  • Java多线程通信之wait()和notify()方法

    1.wait()方法和sleep()方法:

    wait()方法在等待中释放锁;sleep()在等待的时候不会释放锁,抱着锁睡眠。

    2.notify():

    随机唤醒一个线程,将等待队列中的一个等待线程从等待队列中移到同步队列中。

    public class Demo_Print {
        public static void main(String[] args) {
            Print p = new Print();
            new Thread() {
                public void run() {
                    while (true) {
                        p.print1();
                    }
                };
            }.start();
    
            new Thread() {
                public void run() {
                    while (true) {
                        p.print2();
                    }
                };
            }.start();
        }
    }
    
    class Print {
        int flag = 1;
    
        public synchronized void print1() {
            if (flag != 1) {
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            System.out.print("你");
            System.out.print("好");
            System.out.print("吗????????????");
            System.out.println();
    
            flag = 2;
            this.notify();
        }
    
        public synchronized void print2() {
            if (flag != 2) {
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            System.out.print("我");
            System.out.print("好");
            System.out.println();
    
            flag = 1;
            this.notify();
        }
    }

    在该案例中,实现一问一答的线程同步通信。当方法中开启了wait()方法后,通过改变flag的值来唤醒线程进而实行另一个方法。

  • 相关阅读:
    对拍
    浅谈trie树
    蒟蒻的二分模板
    浅谈线性素数筛
    浅谈树状数组
    HDU 2181 哈密顿绕行世界问题
    HDU 3567 Eight II
    HDU 1043 Eight
    POJ 3076 Sudoku
    hihoCoder 1087 Hamiltonian Cycle
  • 原文地址:https://www.cnblogs.com/springa/p/12631483.html
Copyright © 2011-2022 走看看