我知道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());
}
答案 0 :(得分:0)
您实际需要的称为BlockingQueue。
BlockingQueue
和Semaphore
都是令牌容器(在 Petri Net 术语中的位置),因此都可以用于并行进程(线程)的同步。根据设计,Semaphore
拥有无法区分的标记,而BlockingQueue
拥有彩色标记,表示为对任意对象的引用。 BlockingQueue::put
对应于Semaphore::release
,BlockingQueue::take
对应于Semaphore::aquire
。