六、有序的排隊進場-semaphore
在現實中我們會經常遇到排隊進場的一種情況,一家餐廳能容納的最多人數是固定的,假設是4人,那麼如果來了20個人的話最多也就進去四個人吃,乙個吃完了走另外乙個人進去。在多執行緒中也會遇到這種情況,對資源來說或許每次只能支援4個執行緒進行作業,那麼我們就需要用到semaphore(訊號量,該訊號量與計算機系統裡面的訊號量作用效果不同)來對這個排隊進場流程進行控制,在需要限制的執行緒中我們通過semaphore的acquire方法來獲取許可,然後決定能否執行,通過release方法對許可進行釋放,在初始化semaphore物件的時候我們需要給定乙個int引數表示當前支援的許可數,即上述現實例子的餐廳能容納的最多人數,然後把這個機制通過semaphore去幫我們處理,當然在semaphore中也有提供了相應的api讓我們知道當前等待的執行緒數,當前可獲取的許可數等,下面通過**來熟悉這個排隊進場的過程。
public
class semaphoretest catch (interruptedexception e1)
system.out.println("顧客進場");
system.out.println("顧客開始吃飯");
try catch (interruptedexception e)
valve.release();
}});
consumer.start();
}while(true) catch (interruptedexception e) }}
}
結果:
顧客進場
顧客開始吃飯
顧客進場
顧客開始吃飯
顧客進場
顧客進場
顧客開始吃飯
顧客開始吃飯
----------------------
當前還可通行數:0
當前作用佇列長度:6
當前是否有等待執行緒:true
----------------------
顧客進場
顧客開始吃飯
顧客進場
顧客開始吃飯
顧客進場
顧客開始吃飯
顧客進場
顧客開始吃飯
----------------------
當前還可通行數:0
當前作用佇列長度:2
當前是否有等待執行緒:true
----------------------
顧客進場
顧客開始吃飯
顧客進場
顧客開始吃飯
----------------------
當前還可通行數:2
當前作用佇列長度:0
當前是否有等待執行緒:false
----------------------
----------------------
當前還可通行數:4
當前作用佇列長度:0
當前是否有等待執行緒:false
----------------------
例子是一次性給出了十條執行緒,但是每次執行的執行緒只允許4條共同作業。通過上述**可以看出,如果使用訊號量對執行緒執行的**體進行控制的話,可以有效的決定當前最多的執行緒執行數,控制一定的併發量 一心賺錢的人,親子關係差
父母別光顧著賺錢。據英國 每日郵報 報道,加拿大英屬哥倫比亞大學心理學家最新研究顯示,那些沉迷於工作 財富和社會地位的父母,會因為被財富分心而忽視對孩子的教育。研究人員認為,金錢與育兒兩者之間存在衝突。研究者在乙個家庭日活動上對父母進行了心理問卷調查。他們讓一組父母閱讀了一篇關於該活動的經濟收益和成...
萬眾一心讚國足出局
北京時間11月17日晚,2006世界盃亞洲區預選賽d組中國隊與中國香港隊的比賽在廣州天河體育中心結束。最終中國隊7 0大勝香港,而科威特在主場6 1大勝馬來西亞。這樣中國隊與科威特在相同積分 相同淨勝球情況下,科威特憑藉進球數優勢壓倒中國隊晉級,中國隊屈居小組第二,無緣德國世界盃。儘管網上聲嘶力竭,...
三心二意沒結果,一心一意又如何
三心二意沒結果,一心一意又如何 的最高境界 我到底有沒有吃過東西?一稱體重,我就很不開心,我不開心的時候就想吃東西。中學時有賊心沒賊膽,大學時有賊膽沒賊心,現在賊心賊膽都有了,但賊沒有了。人生的悲哀就在於,當你想兩肋插刀的時候,卻只有一把刀。像你這種體格的男人聞這樣一朵嬌弱的花,看起來真讓人崩潰。人...