Java 및 App Server 사용 스레드 실행기가있는 응용 프로그램을 배포합니다.종료 후 Thread Executer 자체가 메모리에 남아있는 이유는 무엇입니까?
배포가 진행되지 않는 동안 나는 executer를 종료하도록 요청합니다. 이렇게하면 모든 작업이 성공적으로 취소됩니다. 그러나 VisualVM을 통해 나는 executer 자체를 나타내는 스레드를 볼 수 있으며 wait 상태에 있습니다. 나는 전체 애플리케이션이 배포 해제 될 때 임원에 대한 언급을 유지하지 않는다. 따라서 배포 - 배포 취소주기를 여러 번 반복하면 스레드 수가 증가하는 방식을 볼 수 있습니다.
어떻게 제거합니까?
UPDATE :
public void startScheduler()
{
if (scheduledExecutor == null)
{
scheduledExecutor = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("My ScheduledExecutor"));
processFuture = scheduledExecutor.scheduleAtFixedRate(new Runnable()
{
@Override
public void run()
{
startProcessor();
}
}, 0, 84600, TimeUnit.SECONDS);
}
}
public void stopScheduler()
{
if (processFuture != null)
{
processFuture.cancel(true);
processFuture = null;
}
if (scheduledExecutor != null)
{
try
{
scheduledExecutor.shutdownNow();
scheduledExecutor.awaitTermination(10, TimeUnit.SECONDS);
}
catch (InterruptedException ignored)
{}
finally
{
scheduledExecutor = null;
}
}
}
사용하는 특정 Executor 클래스는 무엇입니까? 그리고 당신이 부르는 정확한 종료 방법은 무엇입니까? – richs
Executors.newSingleThreadScheduledExecutor 및 shutdownNow() – user567068
이 코드는 정확합니다. 집행자가 종료되면 문제는 다른 곳에 있습니다. – jtahlborn