나는 제작자와 소비자 스레드 사이에 공유 버퍼를 쓰려고했다. 여기 내 코드는 다음과 같습니다.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
동기화 된 블록 내부의'notify()'는 의심 스럽습니다. (작동하는지 또는 교착 상태가되는지 알 수 없습니다) –
@Andreas_D : 다른 방법으로는 notify()를 호출 할 수 없습니다. 의심 많은? (그의 코드는 다른 이유로는 의심 스럽지만 그 코드는 아닙니다.) – vanza