兩個執行緒交替列印數字 Condition喚醒與等待

2021-09-02 12:41:16 字數 527 閱讀 7009

[b]看到一道關於多執行緒題:如何實現兩個執行緒交替列印數字0-9?[/b]

首先我們會想到要實現交替列印,那麼就要其中乙個執行的時候,另外乙個處於等待狀態,當該執行緒執行完的時候,喚醒另外乙個。如此執行就可實現。

我們可以通過wait和notify對執行緒進行狀態控制,並且我們需要兩個監視器分別對這兩個執行緒的wait和notify控制。如果用synchronized的wait和notify,實現起來比較麻煩(只有wait在相同的鎖和監視器上的執行緒,才能被喚醒),因為對於同乙個鎖,我們需要不同的監視器進行控制wait和notify。這種情況下,condition可以比較好的支援.

[b]condition[/b]:能夠更加精細的控制多執行緒的等待與喚醒,並且對於同乙個鎖可以建立多個condition監視器。

**如下:

執行結果:

t1:0

t2:1

t1:2

t2:3

t1:4

t2:5

t1:6

t2:7

t1:8

t2:9

兩個執行緒交替列印0 100的即偶數

兩個執行緒交替列印0 100的寄偶數,用wait和notify public class waitnotifyprintoddevenwait 1.拿到鎖,我們就列印 2。一旦列印完喚醒其他執行緒就休眠 static class turningrunner implements runnable c...

多執行緒之兩個執行緒交替列印的問題分析

場景一 在我們面試中經常會有這麼乙個場景,就是我們用執行緒a輸出 a 字元,有執行緒b輸出 b 字元,交替進行,要求a執行緒執行完任務輸出 a執行緒列印完了 b執行緒執行完任務輸入 b執行緒列印完了 最後有主線程輸出一句話 我列印完了 當你看到這個場景時,有點多執行緒經驗的人肯定會感覺很容易,然後有...

多執行緒技術 兩個執行緒交替列印奇數和偶數

1.要列印的資源 1 package com.mytest.thread 2 3 4 要列印的資源 5 6 7 public class num 2.列印奇數的執行緒 1 package com.mytest.thread 2 3 public class printodd implements r...