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的值来唤醒线程进而实行另一个方法。

  • 相关阅读:
    递归算法的时间复杂度分析
    MongoDB入门简单介绍
    关于用例须要多少文档以及业务用例等等
    Java连接redis的使用演示样例
    C++ String 转 char*
    MySQL和PostgreSQL 导入数据对照
    SSL连接建立过程分析(1)
    XTU OJ 1210 Happy Number (暴力+打表)
    Codeforces Round #258 (Div. 2)[ABCD]
    CreateFont具体解释
  • 原文地址:https://www.cnblogs.com/springa/p/12631483.html
Copyright © 2011-2022 走看看