У меня есть Java-программа, принимающая 100% -ный процессор, но, похоже, ничего не делая.
Если я беру дамп потока, есть 4 потока (из пула из 5), ожидающих блокировки.
"Incoming WorkPool 5" - Thread [email protected]
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- waiting to lock <7212149b> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) owned by "Incoming WorkPool 3" [email protected]
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:867)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1197)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:214)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:290)
at java.awt.EventQueue.isDispatchThreadImpl(EventQueue.java:1019)
at java.awt.EventQueue.isDispatchThread(EventQueue.java:1014)
Нить, которую они ждут, будет RUNNABLE
"Incoming WorkPool 3" - Thread [email protected]
java.lang.Thread.State: RUNNABLE
at java.awt.EventQueue.isDispatchThreadImpl(EventQueue.java:1024)
at java.awt.EventQueue.isDispatchThread(EventQueue.java:1014)
Это JDK 7.0.25, поэтому кажется, что один поток застрял на
EventQueue next = eq.nextQueue;
while (next != null) {
eq = next;
next = eq.nextQueue;
}
Есть два потока AWT EventQueue, пытающихся получить тот же pushpoplock.
VM работает как служба, поэтому ему не следует пытаться использовать AWT, но это делается с помощью библиотеки, которую я использую.
Любые идеи? Могу ли я предотвратить это?
Спасибо!