プロデューサースレッドとコンシューマースレッドの間で共有バッファーを作成するつもりでした。これが私のコードです:
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;
}
}
私はマルチスレッドに不慣れです。潜在的な同時実行バグはありますか?これは、この目標を達成するための「標準/一般的な」方法ですか?それとも、もっと簡単で効率的な方法はありますか?