Tło:Zastosowanie java.util.concurrent.Executor zatrzymuje Tomcat od zatrzymania
muszę korzystać java.util.concurrent.Executor
do serializacji wykonanie niektórych starszych kod wewnątrz WebService.
Dodałem zmienną składową, executor, do klasy WebService. Jest on wtryskiwany z zewnątrz przez ramę sprężystą.
Wykonawca fasoli jest zdefiniowany w następujący sposób:
wersji<bean id="riskValueEstimateUpdateExecutor" scope="singleton"
class="java.util.concurrent.Executors"
factory-method="newSingleThreadExecutor" />
- Tomcat wersja 6.0.22
- Java framework 1,6
- wiosenny 2.5.5
Problem:
WS działa zgodnie z oczekiwaniami. Przetworzyliśmy go na serwer linuxowy. Wtedy uświadomiliśmy sobie, że skrypt zatrzymujący tomcat nie może już zatrzymać usługi.
Używam kill -3 do instancji tomcat. W zrzucie wątku znajduję następujące linie:
"pool-2-thread-1" prio=10 tid=0xad637c00 nid=0xf37 waiting on condition [0xae882000..0xae883020]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0xb453b710> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:946)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:906)
at java.lang.Thread.run(Thread.java:619)
Jak mogę rozwiązać ten problem?
Jeśli potrzebujesz więcej informacji, proszę sugerować.
czy to jest właściwy w użyciu executorów w tomcat/java/spring env? – Dejell