2016-03-14 3 views
3

Я использую службу исполнителя, создавая фиксированное количество потоков для получения данных HTTP GET.Как остановить поток исполнителей, когда Tomcat остановлен?

executorService = ExecutorServiceFactory.getInstance().getExecutorService(Config.getInstance().getNumberOfThreads(), "ThreadExecutor_"+UIDFactory.getInstance().createSessionID()); 
executorService.execute(new Retrieve(data)); 

private class Retrieve implements Runnable{ 
    private Vector<String> data; 

    public WADORetrieve(Vector<String> data) {   
      this.data = data; 
    } 

    @Override 
    public void run() { 
     for(int i=0;i<data.length;i++){ 
      fetch(data[i]); 
     } 
    } 
}  

Когда Tomcat остановлен мы получаем эту ошибку:

SEVERE: The web application [/viewer] appears to have started a thread named [ThreadExecutor_5161616156] but has failed to stop it. This is very likely to create a memory leak.

Является ли это реальная проблема? Что я могу сделать, чтобы остановить tomcat правильно без этих служебных ошибок.

+0

Возможный дубликат [Servlet] запустил поток, но не смог его остановить »- утечка памяти в Tomcat] (http://stackoverflow.com/questions/25126980/servlet-has-started-a-thread-but- fail-to-stop-it-memory-leak-in-tomcat) – OhadR

ответ

4

Это настоящая проблема. Нити, объединенные вашим исполнителем, не исчезают сами по себе, если вы не вызываете выключение на исполнителе, тогда потоки остаются в живых и не позволят JVM выйти из системы.

Создайте ServletContextListener, который вызывает завершение работы вашего исполнителя на contextDestroyed.

Альтернативно вы можете создавать потоки, возвращаемые потоками daemon ThreadFactory, чтобы они выходили, когда заканчивается последний поток не-демона. Так как вы делаете поиск данных, было бы лучше избежать этого, так как он мог оставить ресурсы базы данных незакрытыми.

+0

Как остановить все потоки deamon в веб-приложении с помощью метода contextDestroyed. Поскольку я столкнулся с проблемой, которую я задал по адресу http://stackoverflow.com/questions/39166512/память-просачивание ошибка-в-TOMCAT-сервер, даже-после-удаленный кварца, связанные-код – Vicky

Смежные вопросы