可以为Java信号灯许可分配值吗?

时间:2018-10-04 13:10:09

标签: java concurrency semaphore

我知道Semaphore只会保留可用许可证的数量,而不是使用实际的许可证对象,但是在这种情况下,我希望获得具有特定值的每个许可证。
下面是我的项目,试图获取每个许可证(表)的ID,我知道这是错误的,因为它仅返回到先前的许可证值,而不是它获取的(我希望分配)的特定值。
那么,有什么方法可以为信号灯许可证分配值?

public class Table extends Semaphore{
int total_table;

public Table(int permits) {
    super(permits);
    total_table = permits;
}

public int table_id(){
    return total_table - availablePermits();
}
public void getTable(int cust_id){
    try{
        super.acquire();
        System.out.println("Customer " + cust_id + " : sit at Table-" + table_id());
    }catch (Exception e){}
}

public void leaveTable(int cust_id, int t_id){
    super.release();
    System.out.println("Customer " + cust_id + " : leaving Table-" + table_id());
}

1 个答案:

答案 0 :(得分:0)

您实际需要的称为BlockingQueueBlockingQueueSemaphore都是令牌容器(在 Petri Net 术语中的位置),因此都可以用于并行进程(线程)的同步。根据设计,Semaphore拥有无法区分的标记,而BlockingQueue拥有彩色标记,表示为对任意对象的引用。 BlockingQueue::put对应于Semaphore::releaseBlockingQueue::take对应于Semaphore::aquire