Привет, я пытаюсь синхронизировать классы, используя semaphore.aqcuire()
и semaphore.release()
. Я звоню semaphore.release()
из класса с именем ReadSerialPort
и semaphore.aqcuire()
от WriteSerialPort
для подключения телефонного центра к ПК. Моя проблема заключается в том, что телефонный центр не всегда отвечает.Java: Использование Семафора с таймером
Я хотел бы знать способ установить таймер и сделать semaphore.release()
по прошествии времени.
P.S: Я попытался с помощью TimedSemaphore
классов, но ничего не произошло
было бы опцией поставить логику на сторону приобретения? есть Semaphore.tryAcquire (тайм-аут) –
Образец, который вы описываете, на самом деле не имеет смысла. Вы должны убедиться, что 'release()' вызывается обычным образом и использует таймауты по мере необходимости для блокировки вызовов во время их хранения. (Очень сложно сказать, как исправить свои проблемы без кода и контуры общих ресурсов и что с ними происходит.) – millimoose
Освобождение семафора на таймере может заставить вещи сломаться плохо, так как я предполагаю, что есть причина он был приобретен. То, что вы обычно делаете, это попытаться приобрести его с тайм-аутом и отказаться, если поток, содержащий семафор, не вернет его. Таким образом, вы будете что-то висели, а не думаете, что это было выпущено обычным способом. –