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

时间:2015-08-19 07:52:21

标签: java customization semaphore

我正在尝试实现自己的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。

我在这里缺少什么点?

0 个答案:

没有答案