ArrayBlockingQueue死锁

时间:2014-11-20 07:59:26

标签: java multithreading

所以,我现在有一个使用ArrayBlockingQueue的生产者 - 消费者系统。 所有iz很长一段时间,但是昨天系统正在停止,当我在jvm上jstack时,我发现所有应该提供"提供"在提供给ArrayBlockingQueue时在Thread.State: WAITING中,并且当从{{1}轮询时,所有应该" poll" 的线程也处于Thread.State: WAITING状态}}。

我在分析jstack结果时仍然是新手,但据我所知,jstack生成的日志是jvm中所有线程状态的快照。如果是这样,我猜这是一个僵局?

我试过谷歌搜索原因,但似乎没有人在ArrayBlockingQueue中找到任何人谈论死锁。我也无法重现这个问题。 这个特殊问题是否有任何已知问题?

这是jstack生成的一些日志:

报价:

ArrayblockingQueue

投票:

ClientHandlerISO_404" prio=10 tid=0x8be5c800 nid=0x5299 waiting on condition [0x8b28c000..0x8b28ce30]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x95515440> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:747)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:778)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1971)
        at java.util.concurrent.ArrayBlockingQueue.offer(ArrayBlockingQueue.java:287)
        at id.co.vsi.common.database.DB.insertToTableAsynchronously(DB.java:177)

感谢您的帮助

0 个答案:

没有答案