Вызов освобождения перед приобретением потоком
Я пишу небольшую программу из нескольких потоков и использую семафор для обеспечения взаимного исключения. Но у меня в голове возникает проблема.
Что будет, если Semaphore.release
называется раньше Semaphore.acquire
?
у меня работает нормально. это плохая практика или нормально делать?
1 ответ
Я думаю, что вы говорите о принципе монитора. Это используется для предотвращения взаимных блокировок при доступе к данным в памяти, которая используется многими потоками или процессами.
Если вы делаете это, пожалуйста, сообщите о синхронизированном блоке в Java. Это гарантирует, что ни один другой поток не сможет получить доступ к этому объекту одновременно с потоком, который удерживает синхронизированный блок в теле своего метода. Если другие хотят получить доступ к этим данным, пока вы находитесь в синхронизированном блоке, другие должны подождать, пока текущий рабочий поток не выйдет из этого состояния на соответствующем объекте / данных.