배경을 정지에서 바람둥이를 중지 :사용
나는 WebService를 내부의 레거시 코드의 실행을 직렬화 java.util.concurrent.Executor
을 사용해야합니다.
WebService 클래스에 멤버 변수 인 executor를 추가했습니다. 그것은 springframework에 의해 외부에서 주입됩니다.
집행자 빈은 다음과 같이 정의된다
<bean id="riskValueEstimateUpdateExecutor" scope="singleton"
class="java.util.concurrent.Executors"
factory-method="newSingleThreadExecutor" />
- 톰캣 버전 : 6.0.22
- Java 버전 : 1.6
- 스프링 프레임 워크 : 2.5.5
을 문제 :
WS가 예상대로 작동합니다. 우리는 그것을 리눅스 서버에 배포했습니다. 그런 다음 우리는 tomcat stop 스크립트가 더 이상 서비스를 중지 할 수 없음을 알았습니다.
나는 tomcat 인스턴스에 kill -3을 사용합니다. 스레드 덤프에서 다음 줄을 찾습니다.
"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)
이 문제를 어떻게 해결할 수 있습니까?
자세한 정보가 필요하면 제안하십시오.
이것은 tomcat/java/spring env에서 실행 프로그램을 사용하는 것이 맞습니까? – Dejell