久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

java怎么實現(xiàn)兩個線程交替打印

152次閱讀
沒有評論

共計 1252 個字符,預(yù)計需要花費 4 分鐘才能閱讀完成。

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

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

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(); // 當(dāng)前線程等待 
                    } 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(); // 當(dāng)前線程等待 
                    } catch (InterruptedException e) {e.printStackTrace();
                    }
                }
            }
        }
    }
}

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

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

丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-12-13發(fā)表,共計1252字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 洪洞县| 塔城市| 泰安市| 化德县| 大洼县| 崇仁县| 永仁县| 荣昌县| 横山县| 淅川县| 霍邱县| 吕梁市| 龙川县| 桃源县| 浮梁县| 溧水县| 当涂县| 宁晋县| 蓬安县| 卫辉市| 临安市| 广东省| 商都县| 博罗县| 达日县| 仲巴县| 普陀区| 沁源县| 台州市| 义乌市| 固安县| 枣强县| 石泉县| 宁乡县| 射洪县| 桂林市| 定远县| 庄河市| 陇西县| 安岳县| 新昌县|