Это ожидаемое поведение под Linux?У меня есть несколько рабочих потоков, которые не держат никаких блокировок, но полностью используют все ядра процессора.Раньше я работал без перерыва, никогда не звонил Thread.yield()
.Это вызвало зависание потока событий AWT в его собственном мьютексе (или, я так думаю) до тех пор, пока рабочие не закончили.Даже отладчик затмения не мог остановить программу.Кажется, что планировщик не взаимодействует корректно с системной блокировкой X Window, используемой AWT.
Время от времени вызывая Thread.yield()
, проблема устраняется, но я бы не стал полагаться на эту технику.потому что спецификация yield()
ничего не гарантирует.Есть ли другие обходные пути?
Я использую JRE от Oracle для Java 8, но OpenJDK ведет себя так же.