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
,以防止任何异常到达执行器。