
При запуске программы Java вы получаете эту ошибку?
|
1
2
3
|
Исключение в нить главный Java. яз. IllegalMonitorStateException
в Яве . яз. Объект . ждать (Родной Метод )
в crunchify. ком . учебник . CrunchifyJavaThreadPriority . main ( CrunchifyJavaThreadPriority . java : 50 )
|
Сегодня, работая над Java-программой, я стал выше java.lang. IllegalMonitorStateException Исключение во время выполнения . Во время компиляции не было никаких ошибок. После завершения полной Java-программы по созданию потоков, когда я запускал код, неожиданно появилась ошибка.
Что ж, так как трассировка стека исключений четко показала номер строки, откуда появилось исключение, я не смог сразу найти решение. Исключение исходило снизу wait() заявление.
|
1
2
3
4
5
|
пытаться {
crunchChildThread . подождите ( 10000 ) ; < ==== отсюда
} ловить ( InterruptedException е ) {
эл . printStackTrace ( ) ;
}
|
Это оказался отсутствующий синхронизированный блок. Чтобы Thread.wait () работал, блок кода должен быть в синхронизированном блоке . Это происходит, когда вы пытаетесь получить доступ без удержания блокировки потока / объекта .
Чтобы это исправить, используйте приведенный ниже код. Убедитесь, что вы используете synchronized keyword для метода.
|
1
2
3
4
5
6
7
8
9
10
11
|
частный синхронизированная пустота generateThreadWait ( ) {
окончательный DateTimeFormatter dtf знак равно DateTimeFormatter . ofPattern ( гггг / мм / дд чч: мм: сс ) ;
пытаться {
println ( «Внутри синхронизированной записи блока …» + DTF. формат ( LocalDateTime . now ( ) ) ) ;
это. подождите ( 10000 ) ;
println ( «Внутри синхронизированного блока выхода …» + DTF. формат ( LocalDateTime . now ( ) ) ) ;
} ловить ( InterruptedException е ) {
эл . printStackTrace ( ) ;
}
}
|
Теперь снова запустите вашу программу, и вы не должны видеть IllegalMonitorStateException исключение больше.
0.00 (0%) 0 votes







