91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

java wait在多線程中如何用

小樊
81
2024-11-17 00:55:57
欄目: 編程語言

在Java中,wait()方法用于讓當前線程等待,直到其他線程調用同一個對象的notify()notifyAll()方法。在多線程環境中,wait()notify()notifyAll()方法必須在一個同步代碼塊或同步方法中使用,以確保線程安全。

以下是一個簡單的示例,展示了如何在多線程環境中使用wait()notifyAll()

public class WaitNotifyExample {
    private static final Object lock = new Object();
    private static boolean dataReady = 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("生產者生產數據...");
                dataReady = true;
                lock.notifyAll(); // 通知消費者數據已準備好
                try {
                    lock.wait(); // 等待消費者消費數據
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    static class Consumer implements Runnable {
        @Override
        public void run() {
            synchronized (lock) {
                System.out.println("消費者等待數據...");
                while (!dataReady) {
                    try {
                        lock.wait(); // 等待生產者生產數據
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println("消費者消費數據...");
            }
        }
    }
}

在這個示例中,我們有一個生產者線程和一個消費者線程。生產者生產數據后,調用lock.notifyAll()通知消費者數據已準備好。消費者在等待數據的過程中,調用lock.wait()進入等待狀態。當生產者通知消費者數據已準備好時,消費者會被喚醒并繼續執行。

0
天柱县| 芦溪县| 闸北区| 肇东市| 南昌市| 辽中县| 栾城县| 沐川县| 阿城市| 金阳县| 玉山县| 都江堰市| 鄱阳县| 盈江县| 福安市| 涞水县| 汝州市| 全州县| 靖安县| 镇巴县| 皮山县| 汾阳市| 白山市| 鹰潭市| 宜丰县| 玉环县| 东乌珠穆沁旗| 内乡县| 永安市| 新郑市| 射阳县| 左云县| 桐梓县| 阳信县| 安化县| 鹤山市| 张家口市| 桃园县| 长垣县| 崇文区| 福鼎市|