Java 使用信号量忙等待

Java 使用信号量忙等待,java,multithreading,synchronization,semaphore,Java,Multithreading,Synchronization,Semaphore,我正在使用信号量执行一些同步线程。现在我要做的就是等待一些客户线程使用floor_clerk线程中的信号量进入队列。我以前是用while循环来做的。客户线程也必须等待,直到楼层办事员也使用信号灯协助。我以前是用深度睡眠来做的。 任何等待都必须使用P(信号量)(获取)这就是等待的方式。 这就是任务: 楼层服务员等待(使用信号灯)顾客到达;然后,他们会帮助他们获得他们需要的任何信息。然而,楼层办事员一次只能帮助一位客户;因此,客户必须等待(使用信号灯)有空的职员帮助他/她。 我以前的楼层服务员等待代

我正在使用信号量执行一些同步线程。现在我要做的就是等待一些客户线程使用floor_clerk线程中的信号量进入队列。我以前是用while循环来做的。客户线程也必须等待,直到楼层办事员也使用信号灯协助。我以前是用深度睡眠来做的。 任何等待都必须使用P(信号量)(获取)这就是等待的方式。 这就是任务: 楼层服务员等待(使用信号灯)顾客到达;然后,他们会帮助他们获得他们需要的任何信息。然而,楼层办事员一次只能帮助一位客户;因此,客户必须等待(使用信号灯)有空的职员帮助他/她。

我以前的楼层服务员等待代码是:

while (done != Main.csize) {        
    //wait while their is no customer in queue
    while (queue.isEmpty() && done != Main.csize) {
    }

    //while their is a customer in queue assist customers
    while (queue.size() != 0 && done != Main.csize) {
        //some stuff to do
    }
}

请帮助我在这里实现信号量。

只需将您的客户端存储在阻塞队列中,并使用
take()
方法进行阻塞,直到有可用的客户端提供服务。没有必要将队列和阻塞机制分开,因为它已经内置到库中

如果您必须使用信号量,信号量的工作原理基本上是有一个阻塞队列“许可证”。您应该考虑如何将此阻塞功能应用到您尝试执行的操作中。当有可用的客户端时,您希望
释放()
许可证,并允许服务
获取()
。如果没有任何许可证,则服务将阻止
acquire()


请帮帮我吧??
// Add client
queue.add(client);
semaphore.release();

// Clerk loop
while (true) { // Whatever condition
    semaphore.acquire(); 
    Client client = queue.remove();
    // ...
}