所以,我现在有一个使用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)
感谢您的帮助