1116 列印零與奇偶數

2021-09-29 02:47:48 字數 1719 閱讀 3370

題目描述:

假設有這麼乙個類:

class zeroevenodd // 建構函式

public void zero(printnumber) // 僅列印出 0

public void even(printnumber) // 僅列印出 偶數

public void odd(printnumber) // 僅列印出 奇數

}相同的乙個 zeroevenodd 類例項將會傳遞給三個不同的執行緒:

執行緒 a 將呼叫 zero(),它只輸出 0 。

執行緒 b 將呼叫 even(),它只輸出偶數。

執行緒 c 將呼叫 odd(),它只輸出奇數。

每個執行緒都有乙個 printnumber 方法來輸出乙個整數。請修改給出的**以輸出整數序列 010203040506… ,其中序列的長度必須為 2n。

示例 1:

輸入:n = 2

輸出:「0102」

說明:三條執行緒非同步執行,其中乙個呼叫 zero(),另乙個執行緒呼叫 even(),最後乙個執行緒呼叫odd()。正確的輸出為 「0102」。

示例 2:

輸入:n = 5

輸出:「0102030405」

方案選擇:用鎖lock

class

zeroevenodd

lock lock =

newreentrantlock()

; condition zero = lock.

newcondition()

; condition num = lock.

newcondition()

;volatile

boolean zturn =

true

;volatile

int zindex =0;

public

void

zero

(intconsumer printnumber)

throws interruptedexception

printnumber.

accept(0

);zturn =

false

; num.

signalall()

; zindex++;}

finally}}

public

void

even

(intconsumer printnumber)

throws interruptedexception

printnumber.

accept

(i);

zturn =

true

; zero.

signal()

;}finally}}

public

void

odd(intconsumer printnumber)

throws interruptedexception

printnumber.

accept

(i);

zturn =

true

; zero.

signal()

;}finally}}

}

1116 列印零與奇偶數

假設有這麼乙個類 class zeroevenodd 建構函式 public void zero printnumber 僅列印出 0 public void even printnumber 僅列印出 偶數 public void odd printnumber 僅列印出 奇數 相同的乙個 zer...

列印零與奇偶數

題目 用三個互斥鎖控制列印0,奇數,偶數的順序。每把鎖控制一種列印。列印0後,如果是偶數,則釋放奇數鎖,即開始列印奇數。反之,釋放偶數鎖。列印奇數後,釋放0鎖 列印偶數後,釋放0鎖。class zeroevenodd printnumber x outputs x where x is an int...

列印零與奇偶數

假設有這麼乙個類 class zeroevenodd 建構函式 public void zero printnumber 僅列印出 0 public void even printnumber 僅列印出 偶數 public void odd printnumber 僅列印出 奇數 相同的乙個 zer...