私には 2 つのスレッドがあり、現在、同期ブロック内でオブジェクトの notify() および wait() メソッドを使用してロックを行っています。メインスレッドがブロックされないようにしたかったので、この方法でブール値を使用しました (関連するコードのみが提供されます)。
//Just to explain an example queue
private Queue<CustomClass> queue = new Queue();
//this is the BOOLEAN
private boolean isRunning = false;
private Object lock;
public void doTask(){
ExecutorService service = Executors.newCachedThreadPool();
//the invocation of the second thread!!
service.execute(new Runnable() {
@Override
public void run() {
while(true){
if (queue.isEmpty()){
synchronized (lock){
isRunning = false; //usage of boolean
lock.wait();
}
}
else{
process(queue.remove());
}
}
});
}
//will be called from a single thread but multiple times.
public void addToQueue(CustomClass custObj){
queue.add(custObj);
//I don't want blocking here!!
if (!isRunning){
isRunning = true; //usage of BOOLEAN!
synchronized(lock){
lock.notify();
}
}
}
ここで何か問題があるようですか?ありがとう。 編集: 目的: この方法では、add() が 2 回目以降に呼び出されるときに、notify() でブロックされません。メインスレッドのこのノンブロッキング動作を達成するためのより良い方法はありますか?