JavaEEWebListener和线程

JavaEEWebListener和线程,java,multithreading,jakarta-ee,servlets,scheduledexecutorservice,Java,Multithreading,Jakarta Ee,Servlets,Scheduledexecutorservice,我有一个标记为@WebListener的servlet public void contextInitialized(ServletContextEvent event) { schedulerEngine = Executors.newSingleThreadScheduledExecutor(); schedulerEngine.scheduleAtFixedRate(new Batch1(), 0, MILLISECOND

我有一个标记为
@WebListener
的servlet

  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() {
         ....
        }
}
迭代的
毫秒=60000
(1分钟)

是否有可能某些线程因内存问题而自行停止


如果在我的
BatchX()
run方法中出现异常(例如
NullPointerException
),线程将永远停止?

代码块总是可能被异常中断。这是否致命取决于您采取了哪些措施来预防或恢复:

  • 对于已检查的异常,例如
    IOException
    ,您需要在catch块中放入一些恢复和/或日志代码,然后决定是退出该方法还是继续执行
  • 在未检查的异常情况下,例如
    NullPointerException
    最好防止它们,而不是捕获它们,例如,确保在尝试访问对象时没有对象可以为null,或者在迭代时没有索引可能超过数组的边界,等等
  • 编辑:要回答您的特定问题,请点击:

    如果任务的任何执行遇到异常,则后续 死刑被禁止。否则,任务将仅通过终止 执行人的取消或终止


    好的,但是我知道这个异常是否会阻止我所有的计划线程。例如,如果我在run()方法发生异常后等待一分钟,我的计划程序(schedulerEngine对象)将重新计划我的批处理?好的,谢谢。我已经阅读了所有的javadoc,现在我正试图阻止任何异常进入我的代码。因此,除了所有常见的良好实践异常处理之外,对于
    ScheduledExecutorService
    我们还应该在
    run
    方法中添加一个包罗万象的
    try-catch
    ,以防止任何异常到达执行器。