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”应同步等待和通知。看一看等待,不合适的例子: