我有一段代码在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)
答案 0 :(得分:0)
我无法确定try
之前是否有if
,但如果没有finally
,则无法使用try
。如果if
,则可能不会转到alertingPools.isEmpty()
,这意味着
它甚至从未初始化executorService = Executors.newFixedThreadPool((Pools.length));
。这将导致finally子句返回null.shutdown
导致问题。如果可能,尝试在if
之前移动初始化。我首先尝试找出alertingPools.isEmpty()
的天气。