題目描述:
假設有這麼乙個類:
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...