SynchronousQueue中的NullPointerException

时间:2019-04-28 17:33:06

标签: java multithreading nullpointerexception

我很少收到此错误(万次运行少于一次):

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

您是否有任何想法可能导致错误以及如何防止错误?

0 个答案:

没有答案