Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java计划任务_Java_Multithreading_Jboss7.x_Scheduler - Fatal编程技术网

Java计划任务

Java计划任务,java,multithreading,jboss7.x,scheduler,Java,Multithreading,Jboss7.x,Scheduler,我正在开发一个监控软件nobreaks,我正在使用API ScheduleExpression,计划每五秒钟运行一次,我的代码如下所示: @PostConstruct public void agendarMonitoramento(){ System.out.println("=================================================================================================");

我正在开发一个监控软件nobreaks,我正在使用API ScheduleExpression,计划每五秒钟运行一次,我的代码如下所示:

@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来设置线程池的大小。你必须搜索这个。您的图形显示了正常的垃圾收集行为—使用的堆会增加,有时会被垃圾收集器释放。