我正在尝试实现自己的Custom Semaphore类。我已经实现了以下代码
import java.util.LinkedList;
public class CustomSemaphore {
int permits;
LinkedList<Thread> waitingQueue= new LinkedList<Thread>();
public CustomSemaphore(int permits) {
this.permits=permits;
}
public synchronized void P(Thread t) throws InterruptedException{
permits--;
if(permits<0){
waitingQueue.add(t);
t.wait()
}
}
public synchronized void V(){
permits=permits+1;
if(permits>0){
if(!waitingQueue.isEmpty()){
Thread t=waitingQueue.removeFirst();
t.notify();
}
}
}
public synchronized int getPermits(){
return permits;
}
}
我不能在Java库中使用原始类,因为我需要根据特定逻辑(未实现)将线程添加到等待队列。
问题是死锁发生,有时我遇到IllegalMonitorException。
我在这里缺少什么点?