java中的自定义计数信号量类

java中的自定义计数信号量类,java,customization,semaphore,Java,Customization,Semaphore,我正在尝试实现自己的自定义信号量类。我已经实现了以下代码 import java.util.LinkedList; public class CustomSemaphore { int permits; LinkedList<Thread> waitingQueue= new LinkedList<Thread>(); public CustomSemaphore(int permits) { this.permits=per

我正在尝试实现自己的自定义信号量类。我已经实现了以下代码

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;
    }

}
import java.util.LinkedList;
公共类自定义信号量{
int许可证;
LinkedList waitingQueue=新建LinkedList();
公共自定义信号量(int许可证){
这个.许可证=许可证;
}
公共同步的void P(线程t)抛出InterruptedException{
许可证--;
如果(许可证0){
如果(!waitingQueue.isEmpty()){
线程t=waitingQueue.removeFirst();
t、 通知();
}
}   
}
公共同步int GetPermissions(){
返回许可证;
}
}
我不能使用Java库中的原始类,因为我需要根据特定的逻辑(尚未实现)将线程添加到等待队列中

问题是死锁会发生,有时我会遇到非法监视异常


关于我这里缺少的内容,有什么要说的吗?

如果您觉得合适的话,请转到java.util.concurrent包API,如ExecutorService和Executor,这两个API都很好。您缺少的是在调用对象的同步块中调用
wait()
notify()
:那么我应该使用什么作为锁对象呢。我很抱歉。我还没听说过什么是对象监视器锁应该发生在对象上,您将调用它等待并通知。“t”应同步等待和通知。看看wait,nofity示例:如果您觉得合适,请转到java.util.concurrent包API,如ExecutorService和Executor,这是两个好的API。您缺少在调用对象的同步块中调用
wait()
notify()
:那么我应该使用什么作为锁对象呢。我很抱歉。我还没听说过什么是对象监视器锁应该发生在对象上,您将调用它等待并通知。“t”应同步等待和通知。看一看等待,不合适的例子: