Вы можете видеть, что он заблокирован на LinkedBlockingQueue.take()
, что означает, что очередь пуста, поэтому она ожидает. Это совершенно нормально и правильно.
Ваша проблема в другом месте.
Теперь вы говорите, что вы измерили время, а общее время составляет около 3 секунд, но затем вы подразумеваете, чтоэто на самом деле медленнее, чем это. Я полагаю, вы имеете в виду, что для получения адаптивного графического интерфейса требуется более 3 секунд. В этом случае кажется, что вы на самом деле не измерили все шагов. Например, если вы создаете новый Connection
объект, а не получаете его из пула, это очень медленно, но он может не отображаться легко в VisualVM, если вы не знаете, как его искать.
Наконец, вымогут возникнуть проблемы с конфликтами потоков, которые могут появиться с чем-то вроде LockSupport.park()
, но важно понимать, для чего он используется. В вашем примере у вас есть рабочий поток, который не имеет работы, поэтому он спит. Например, это очень сильно отличается от тупика, который будет отображаться как два припаркованных потока (ожидающих блокировки друг друга).
Так почему же он работал раньше? Может быть, это сработало случайно, а не по замыслу. Возможно, версия Java не имеет значения, и вы изменили что-то еще.