对于一项任务,我必须在Java中创建一个计数信号量。我迄今创造了这个裸露的骨头类信号量如何阻止和解除阻塞
public class Semaphore {
int value;
public Semaphore(int value) {
this.value = value;
}
public static void wait(Semaphore s) {
s.value--;
if (s.value < 0) {
// block
}
}
public static void signal(Semaphore s) {
s.value++;
if (s.value <= 0) {
// unblock one process that is blocked on semaphore
}
}
}
现在我很困惑究竟怎么做我阻止在wait()和相反我怎么解锁的信号一个线程()?我读到有一个阻塞的队列,但我会在那里保持对该队列的引用?
你允许为此使用什么锁定基元? [对象#wait()的(http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait())? – 2013-03-08 17:41:27
为什么不实现'wait()'和'signal()'作为实例方法?按照定义,信号量由多个线程调用。您需要同步才能使代码线程安全。 (注意'wait()'应该被命名为'await()'(或其他),因为Object有一个'wait()'方法) – 2013-03-08 17:45:16