中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

java wait方法在多線程中怎么用

小樊
81
2024-11-26 19:40:29
欄目: 編程語言

wait() 方法是 Java 多線程編程中的一個重要方法,主要用于讓當前線程等待,直到其他線程調用同一個對象的 notify()notifyAll() 方法。wait() 方法必須在同步代碼塊或同步方法中使用,否則會拋出 IllegalMonitorStateException 異常。

以下是一個簡單的示例,展示了如何在多線程中使用 wait()notify() 方法:

public class WaitNotifyExample {
    private static final Object lock = new Object();
    private static boolean messageReady = false;

    public static void main(String[] args) {
        Thread producer = new Thread(new Producer());
        Thread consumer = new Thread(new Consumer());

        producer.start();
        consumer.start();
    }

    static class Producer implements Runnable {
        @Override
        public void run() {
            synchronized (lock) {
                System.out.println("生產者生產了一條消息");
                messageReady = true;
                lock.notify(); // 通知消費者消息已準備好
            }
        }
    }

    static class Consumer implements Runnable {
        @Override
        public void run() {
            synchronized (lock) {
                try {
                    while (!messageReady) {
                        System.out.println("消費者等待消息...");
                        lock.wait(); // 等待生產者通知消息已準備好
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("消費者消費了消息");
            }
        }
    }
}

在這個示例中,我們有兩個線程:一個生產者線程和一個消費者線程。生產者線程生產了一條消息并將其設置為 true,然后調用 lock.notify() 通知消費者線程消息已準備好。消費者線程在一個循環中等待消息,如果消息未準備好,則調用 lock.wait() 進入等待狀態。當生產者線程通知消息已準備好時,消費者線程將退出循環并消費消息。

請注意,wait()notify() 方法必須在同步代碼塊或同步方法中使用,以確保線程安全。在這個示例中,我們使用了一個名為 lock 的對象作為鎖。

0
凉城县| 东港市| 百色市| 专栏| 凤翔县| 黑河市| 轮台县| 肥西县| 博客| 陈巴尔虎旗| 孙吴县| 陆河县| 蓬安县| 元谋县| 普兰县| 加查县| 弥渡县| 叙永县| 惠水县| 望谟县| 海阳市| 太和县| 清苑县| 金阳县| 浦城县| 湟中县| 无棣县| 锦州市| 广州市| 河北省| 彝良县| 东光县| 双柏县| 临汾市| 兴山县| 华坪县| 神木县| 黔南| 张北县| 郧西县| 鹤峰县|