Java计划任务
我正在开发一个监控软件nobreaks,我正在使用API ScheduleExpression,计划每五秒钟运行一次,我的代码如下所示:Java计划任务,java,multithreading,jboss7.x,scheduler,Java,Multithreading,Jboss7.x,Scheduler,我正在开发一个监控软件nobreaks,我正在使用API ScheduleExpression,计划每五秒钟运行一次,我的代码如下所示: @PostConstruct public void agendarMonitoramento(){ System.out.println("=================================================================================================");
@PostConstruct
public void agendarMonitoramento(){
System.out.println("=================================================================================================");
System.out.println("Iniciando monitoramento");
System.out.println("=================================================================================================");
upsIndividual = nobreaksEjb.getCadNobreaskMonitoramentoIndividual();
ScheduleExpression scheduleExpression = new ScheduleExpression().second("*/5").minute("*").hour("*");
final TimerConfig nobreaksIndividuais = new TimerConfig(NOBREAK_SEM_BANCO_UPS, false);
timerService.createCalendarTimer(scheduleExpression, nobreaksIndividuais);
System.out.println("Iniciado...");
}
@Timeout
public void timeout(Timer timer) {
for (CadNobreak cadNobreak : upsIndividual) {
tHNobreak.monitorarNobreak(cadNobreak);
}
}
但我有一个问题,我通过VisualVM发现这些线程始终处于活动状态,并导致OutOfMemory低于可以看到的活动线程数:
我想知道为什么这些线程在执行后没有关闭,我能做些什么来解决这个问题。如果ScheduleExpression使用线程池,线程对象仍然在池中,因此在内存中。您必须在执行单个任务后释放所有已使用的资源。我该如何做?记住我没有实例化任何线程,一切都是由TimerConfigI完成的,我不知道如何配置ScheduleExpression来设置线程池的大小。你必须搜索这个。您的图形显示了正常的垃圾收集行为—使用的堆会增加,有时会被垃圾收集器释放。