#java #multithreading #locking
#java #многопоточность #блокировка
Вопрос:
У меня есть некоторый код, в котором множество потоков может ожидать блокировки, в то время как определенный поток обновляет некоторые ресурсы с фиксированным интервалом, заданным таймером. В идеале синхронизированный поток должен быть тем, который будет активирован при разблокировке блокировки, если он ожидает блокировки. Есть ли блокировка в Java, которая учитывает приоритеты потоков? Я посмотрел, например, на реализацию монитора Guava, и она вообще не учитывает приоритеты.
Я знаю, что это тема исследования для систем реального времени, и для этого существует множество стандартных алгоритмов, но у меня нет строгих гарантий задержки. В основном мне просто нужна хорошо протестированная реализация.
Комментарии:
1. В этом случае я бы рекомендовал вам попробовать блокировку чтения / записи. Взгляните сюда tutorials.jenkov.com/java-concurrency/read-write-locks.html
2. Не уверен, как поможет блокировка RW? У меня есть критический раздел, который может быть введен только одним потоком одновременно (т. Е. У нас нет нескольких читателей, которые могут входить одновременно, что имеет место для блокировки RW). Когда несколько потоков ожидают блокировки, я просто хочу, чтобы определенный поток имел приоритет над всеми остальными при входе. Это не семантика блокировки RW.
3. @eof Вероятно, была предложена блокировка RW, потому что ваш вопрос трудно понять. Не могли бы вы, пожалуйста, показать нам какой-нибудь псевдокод или что-нибудь, что иллюстрировало бы то, что вы хотите лучше? Почему специальная блокировка, которая сигнализирует о том, что обычные блокировки вообще ожидают одну и ту же блокировку?
4. @eof Есть ли у вас ограничение на количество потоков, ожидающих блокировки? исправлено ли отсутствие потока?
5. Не могли бы вы, возможно, спроектировать это по-другому? Например. Один поток отвечает за выполнение критического раздела и ожидает очереди запросов от других потоков. Затем вы можете сделать это приоритетной очередью.