0

我有一段代码在 TimerTask 中每 5 秒运行一次,还使用 ​​ExecutorService 为每个池跨越一个线程。

if(!alertingPools.isEmpty())
{
    Object[] Pools = alertingPools.values().toArray();
    executorService = Executors.newFixedThreadPool((Pools.length));
    for (Object pool : Pools) {
        executorService.execute(new DataAccumulation(timeStartSecData,
            timeEndSec,pool, jsonArrayResult));

finally {
    executorService.shutdown();
}

但有时会出现以下空指针异常:不确定为什么。还使用 ExecutorService 为每个池跨越一个线程

  Exception in thread "Timer-0" java.lang.NullPointerException
        at com.ebay.lbmongoservice.AlertsData$1.run(AlertsData.java:117)
        at java.util.TimerThread.mainLoop(Timer.java:512)
        at java.util.TimerThread.run(Timer.java:462)
4

1 回答 1

0

我不知道您是否在.try之前有一个if,但如果finally没有try. 它可能不会去ifif the alertingPools.isEmpty(),这意味着它甚至永远不会初始化executorService = Executors.newFixedThreadPool((Pools.length));. 这将导致 finally 子句返回null.shutdown导致问题。如果可能,请尝试将初始化移到if. 我会首先尝试找出天气alertingPools.isEmpty()

于 2013-06-27T06:17:07.013 回答