Antecedentes:El uso de java.util.concurrent.Executor detiene Tomcat se detenga
necesito utilizar java.util.concurrent.Executor
para serializar la ejecución de un código legado dentro de un servicio Web.
He agregado una variable miembro, ejecutor, a la clase WebService. Se inyecta desde el exterior por el marco de la primavera.
El grano ejecutor se define como tal:
versión<bean id="riskValueEstimateUpdateExecutor" scope="singleton"
class="java.util.concurrent.Executors"
factory-method="newSingleThreadExecutor" />
- Tomcat: versión 6.0.22
- Java: marco 1.6
- primavera: 2.5.5
Problema:
El WS funciona como se esperaba. Lo lanzamos a un servidor de Linux. Entonces nos dimos cuenta de que el script stop de tomcat ya no podía detener el servicio.
Utilizo kill -3 para la instancia de tomcat. En el volcado de hilo encontré estas líneas:
"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)
¿Cómo puedo solucionar este problema?
Si necesita más información, por favor sugiera.
¿Es este el correcto de usar ejecutores en tomcat/java/spring env? – Dejell