Java多线程通信之wait()和notify()方法

Posted 时光spring

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的值来唤醒线程进而实行另一个方法。

以上是关于Java多线程通信之wait()和notify()方法的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程系列---“基础篇”14之 wait,sleep,join,yield,park,unpark,notify等通信机制对比

Java 线程通信之 wait/notify 机制

Java 线程通信之 wait/notify 机制

Java 线程通信之 wait/notify 机制

Java 线程通信之 wait/notify 机制

[多线程]wait和notify