我打算寫一個生產者和消費者線程之間的共享緩衝區。這裏是我的代碼:如何在Java線程之間實現共享緩衝區?
class PQueue
{
Token token;
boolean flag = false; // false: add, true: poll
PQueue()
{
token = null;
}
synchronized void add(Token token)
{
if(flag == true)
{
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
flag = true;
notify();
this.token = token;
}
synchronized Token poll()
{
if(flag == false)
{
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
flag = false;
notify();
return this.token;
}
}
我是多線程新手。是否有任何潛在的併發錯誤?這是實現這一目標的「標準/普通」方式嗎?還是有更簡單更有效的方法?
難道你不能只使用java.util.concurrent.BlockingQueue? – vanza 2012-08-14 05:24:53
'notify()'在同步塊內部看起來對我來說很可疑(但不能確定它是否有效或導致死鎖) – 2012-08-14 05:26:25
@Andreas_D:你不能以任何其他方式調用notify(),你是什麼意思可疑? (他的代碼由於其他原因是可疑的,但不是那個。) – vanza 2012-08-14 05:28:24