Вызов освобождения перед приобретением потоком

Я пишу небольшую программу из нескольких потоков и использую семафор для обеспечения взаимного исключения. Но у меня в голове возникает проблема.

Что будет, если Semaphore.release называется раньше Semaphore.acquire?

у меня работает нормально. это плохая практика или нормально делать?

1 ответ

Я думаю, что вы говорите о принципе монитора. Это используется для предотвращения взаимных блокировок при доступе к данным в памяти, которая используется многими потоками или процессами.

Если вы делаете это, пожалуйста, сообщите о синхронизированном блоке в Java. Это гарантирует, что ни один другой поток не сможет получить доступ к этому объекту одновременно с потоком, который удерживает синхронизированный блок в теле своего метода. Если другие хотят получить доступ к этим данным, пока вы находитесь в синхронизированном блоке, другие должны подождать, пока текущий рабочий поток не выйдет из этого состояния на соответствующем объекте / данных.

Другие вопросы по тегам