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

溫馨提示×

java怎么實現兩個線程交替打印

小億
110
2023-10-25 21:52:19
欄目: 編程語言

可以使用synchronized關鍵字和wait()、notify()方法來實現兩個線程交替打印。

下面是一個簡單的例子,其中A線程打印奇數,B線程打印偶數。

public class AlternatePrint {
    private int count = 1;
    private final Object lock = new Object();

    public static void main(String[] args) {
        AlternatePrint alternatePrint = new AlternatePrint();
        Thread threadA = new Thread(() -> alternatePrint.printOdd());
        Thread threadB = new Thread(() -> alternatePrint.printEven());
        threadA.start();
        threadB.start();
    }

    public void printOdd() {
        while (count <= 100) {
            synchronized (lock) {
                if (count % 2 != 0) {
                    System.out.println(Thread.currentThread().getName() + ": " + count);
                    count++;
                    lock.notify(); // 喚醒等待的線程
                } else {
                    try {
                        lock.wait(); // 當前線程等待
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    public void printEven() {
        while (count <= 100) {
            synchronized (lock) {
                if (count % 2 == 0) {
                    System.out.println(Thread.currentThread().getName() + ": " + count);
                    count++;
                    lock.notify(); // 喚醒等待的線程
                } else {
                    try {
                        lock.wait(); // 當前線程等待
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

在上面的例子中,使用一個共享的lock對象作為鎖,每個線程通過synchronized(lock)來獲取鎖對象。當count為奇數時,A線程打印并增加count,然后調用lock.notify()方法喚醒正在等待的B線程。當count為偶數時,B線程打印并增加count,然后調用lock.notify()方法喚醒正在等待的A線程。如果count的值不符合當前線程的打印條件時,當前線程調用lock.wait()方法進入等待狀態,直到被喚醒。

需要注意的是,lock.wait()和lock.notify()方法只能在synchronized塊中調用,否則會拋出IllegalMonitorStateException異常。同時,線程的啟動順序不確定,所以A和B線程的打印順序可能會有不同。

0
平舆县| 鹤峰县| 吉水县| 嘉义县| 梅河口市| 济宁市| 祁连县| 墨脱县| 佛冈县| 沛县| 罗江县| 克山县| 雅安市| 高清| 防城港市| 饶河县| 长丰县| 平果县| 德令哈市| 东光县| 威海市| 浠水县| 筠连县| 宝应县| 育儿| 乐东| 麻栗坡县| 荣昌县| 丰城市| 藁城市| 仁布县| 台山市| 页游| 米易县| 宣武区| 贡山| 汤阴县| 太原市| 伽师县| 永春县| 瓦房店市|