我很少收到此错误(万次运行少于一次):
Exception in thread "pool-1-thread-2" java.lang.NullPointerException
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:461)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
(我手动复制了错误消息,因此可能有错别字。)
我不知道从哪里开始调查,因为错误消息不能告诉我代码的哪一部分会导致错误。该程序很大(大约12,000行代码),并且在许多地方使用线程,因此不容易猜测可能是什么原因。我使用ExecutorService启动新线程。
该问题仅在生产中发生。该程序每分钟执行一次,并且错误通常在2周的间隔内发生。该错误导致服务器挂起,我必须手动重新启动它,这非常烦人。我尝试在调试环境中运行程序,但从未收到此错误。
我正在使用JRE构建1.8.0_111-8u111-b14-3-b14
。
您是否有任何想法可能导致错误以及如何防止错误?