Можно ли назначить значение для разрешений Java Semaphore? - PullRequest
0 голосов
/ 04 октября 2018

Я знаю, что Семафор просто хранит количество доступных разрешений вместо того, чтобы использовался фактический объект разрешений, но в этом случае я надеюсь получить каждое разрешение с определенным значением.Ниже мой проект, который пытается получить идентификатор для каждого разрешения (таблицы), я знаю, что это неправильно, поскольку он возвращает только предыдущее значение разрешений вместо определенного значения, которое он получил (который я надеюсь присвоить).Итак, есть ли способы присвоить значение для разрешений семафор?

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 голосов
/ 04 октября 2018

То, что вам действительно нужно, называется BlockingQueue BlockingQueue, и Semaphore являются контейнерами токенов (места в терминологии Petri Net ) и поэтому оба могут использоваться для синхронизации параллельных процессов (потоков).По своему дизайну Semaphore содержит неразличимые токены, а BlockingQueue содержит цветные токены , представленные в виде ссылок на произвольные объекты.BlockingQueue::put соответствует Semaphore::release, а BlockingQueue::take соответствует Semaphore::aquire.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...