Это не исключение, а, скорее, говорит, что поток "http-bio-8080-exe c -18" не может быть выполнен, поскольку он пытается войти в синхронизированный (синхронизированный) блок. Он не может войти в этот блок, потому что монитор в настоящее время удерживается потоком "http-bio-8080-exe c -7".
Поэтому первым делом нужно выяснить, почему "http-bio- 8080-exe c -7 "не отпускает монитор. Это может быть просто проблема с производительностью, поскольку многие потоки пытаются выполнить tissecition параллельно. Или нить может быть висит. Вы можете проанализировать это, сгенерировав дамп потока:
Чтобы сгенерировать дамп потока go в папку bin вашей установки java. Существует инструмент под названием jps (jps.exe на windows). Выполните его, вы увидите номер (pid) и название программы. Найдите свою программу и выполните jstack [pid]. jstack также находится в папке bin вашей Java установки.
Затем вы увидите, что каждый поток делает в вашей программе, и что поток, которым в данный момент принадлежит монитор, делает.
Существует способ подождать только определенное время c, чтобы попытаться получить блокировку. Я не совсем уверен, решит ли это вашу проблему, но для полноты вот так. Используйте блокировку повторного входа вместе с tryLock:
if( lock.tryLock(long timeout,
TimeUnit unit))
{ try {
// ... method body
}
finally {
lock.unlock()
}
}
else {
// lock could not be acquired at the given time
}