У меня есть служба REST, построенная с использованием Jersey.Сбрасывает ли этот свалка, что у меня есть тупик?
Когда я выполнил «завиток» против моего REST API, команда зависает.
Я запускал jstack & Это обобщенный результат двух потоков в состоянии BLOCKED.
"pool-2-thread-11" prio=6 tid=0x01d51800 nid=0x2394
waiting for monitor entry [0x05e6f000..0x05e6fce8]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.moi.DefaultImageProcessor$DownloadAndScaleCallable.call(
DefaultImageProcessor.java:168)
- waiting to lock <0x257aa440>
(com.moi.ImageUriMutexImpl$MutexImpl)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(
ThreadPoolExecutor.java:885)
"pool-2-thread-10" prio=6 tid=0x01d51000 nid=0x18d0
waiting for monitor entry [0x05e1f000..0x05e1fd68]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.moi.DefaultImageProcessor$DownloadAndScaleCallable.call(
DefaultImageProcessor.java:168)
- waiting to lock <0x257aa6b8>
(com.moi.ImageUriMutexImpl$MutexImpl)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(
ThreadPoolExecutor.java:885)
Я хочу знать, как читать этот сброс стека. Какие признаки следует искать в тупике?
ОБНОВЛЕНИЕ Я решил свою проблему! В основном я делаю HttpClient 4.0 GET внутри синхронизированного блока. HttpClient вел себя плохо & не возвращался & он держал на замках. Через jstack было несколько потоков, удерживающих блокировки, которые вызвали проблему выше. Теперь я понимаю, что это были не тупики, но мои синхронизированные блоки слишком долго возвращались.
Они заблокированы в порядке ... – Bostone