2

У меня есть сервлет, отмеченный как @WebListener.Java EE WebListener и Thread

public void contextInitialized(ServletContextEvent event) {     
     schedulerEngine = Executors.newSingleThreadScheduledExecutor(); 
     schedulerEngine.scheduleAtFixedRate(new Batch1(), 0, MILLISECONDS_ITERATE_PA, TimeUnit.MILLISECONDS); 
     schedulerEngine.scheduleAtFixedRate(new Batch2(), 0, MILLISECONDS_ITERATE_IAS, TimeUnit.MILLISECONDS); 
     schedulerEngine.scheduleAtFixedRate(new Batch3(), 0, MILLISECONDS_ITERATE_EV1, TimeUnit.MILLISECONDS); 
     schedulerEngine.scheduleAtFixedRate(new Batch4(), 0, MILLISECONDS_ITERATE_MV1, TimeUnit.MILLISECONDS); 
     schedulerEngine.scheduleAtFixedRate(new Batch5(), 0, MILLISECONDS_ITERATE_BB, TimeUnit.MILLISECONDS); 
     schedulerEngine.scheduleAtFixedRate(new Batch6(), 0, MILLISECONDS_ITERATE_EV, TimeUnit.MILLISECONDS); 
    } 

public class BatchX implements Runnable { 
     @Override 
     public void run() { 
     .... 
     } 
} 

MILLISECONDS_ITERATE_XX = 60000 (1 минута).

Возможно ли, что какая-то нить остановилась на проблемах памяти?

Если в моем методе запуска BatchX() у меня есть исключение (например, NullPointerException), поток останавливается навсегда?

ответ

1

Всегда исключается возможность исключения блока кода из-за исключения. Является ли это смертельным или нет, зависит от того, какие меры вы принимаете для предотвращения или восстановления из них:

  1. За проверенными исключениями, например, IOException, вам нужно будет добавить код восстановления и/или регистрации в свой блок catch, а затем решить, хотите ли вы выйти из метода или продолжить выполнение.
  2. В случае непроверенных исключений, например. NullPointerException лучше всего предотвратить их, а не ловить их, например, удостоверившись, что ни один объект не может быть пустым при попытке получить к нему доступ, или что индекс не может превышать границы массива при повторном запуске и т. Д.

Edit: Для того, чтобы ответить на ваш конкретный вопрос, то Javadoc говорит:

Если какое-либо выполнение этой задачи наталкивается исключение, последующие казни подавлены. В противном случае задача будет прекращаться только с помощью аннулирования или прекращения работы исполнителя.

+0

Хорошо, но я знал бы, если это исключение блокирует все мои запланированные потоки. Например, если я буду ждать минуту после исключения в методе run(), мой планировщик (объект schedulerEngine) перенесет мою партию? – CeccoCQ

+0

@Cecco: К сожалению нет, проверьте мое редактирование. – Tudor

+0

Хорошо, спасибо. Я прочитал все javadoc, и теперь я пытаюсь помешать исключению в свой код. – CeccoCQ