信号量:
public void enter() throws InterruptedException {
synchronized (block) {
++current;
if (current > permits) {
try {
block.wait();
} catch (InterruptedException e) {
throw e;
}
}
}
}
public void realese() {
synchronized (block) {
--current;
block.notify();
}
}
如何在信号量中建立队列?我希望线程按调用enter()的顺序执行。
答案 0 :(得分:0)
以这种方式:
让parse_str($_POST['data'], $inputValues); //$inputValues will be array with your form fields
方法唤醒每个等待的线程(即release()
)
在block.notifyAll()
方法中,让每个等待的线程查看队列的头部。
enter()
调用,执行-OR - 但是,我会留下一个微妙的问题,让你找出解决方法:
你有一个enter()
来电,只允许两个线程到release()
。
那会很糟糕。因此,您需要找到一种方法来保证每次调用enter()
时,只有一个线程可以完成enter()
调用。
答案 1 :(得分:0)
如果您使用newer java,则可以向构造函数添加公平性设置。
Semaphore(int permits, boolean fair)
像这样
private final Semaphore available = new Semaphore(MAX_AVAILABLE, true);