我想知道我對下面的代碼示例是正確的。 我在java中有兩個線程。 Thread_W and Thread_R
兩者都可以訪問的Queue<String> queue
。Java多線程寫入和讀取
在Thread_W中有一個名爲put的方法。
private void put(String email){
queue.offer(email);
}
並且在Thread_R中有一個名爲get AND的方法,它在Thread_R啓動時被調用一次。
public void get(){
while(true)
{
if(!queue.isEmpty())
{
String to = queue.poll();
//thread will consume some time here ...may be 5-10 seconds.
}
}
}
所以在Thread_W方法put
將稱爲更有效地通過在Thread_W.may甲其他方法是在while循環。
如果我在我的Java項目中使用此代碼,Thread_R會丟失放入隊列的任何電子郵件嗎?
P.S.我真的需要一個緩衝區
看看java的併發性。你需要一個線程安全的隊列。 – vikingsteve 2015-02-10 19:25:48
爲什麼閱讀主題「失去任何電子郵件」? – Zhedar 2015-02-10 19:25:56
您應該使用鎖定來防止同時發生讀寫。它的要點是寫入過程正在寫入,所以它鎖定隊列。讀取進程嘗試訪問隊列,但必須等待寫入完成.. – 2015-02-10 19:26:26