#26 prio=5 os_prio=0 tid=0x00007f3bc8396800 nid=0x5934 waiting on condition [0x00007f3bf0ef1000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x0000000726f2cc58> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
at java.util.concurrent.ArrayBlockingQueue.offer(ArrayBlockingQueue.java:379)
这里使用方法提供(例如,超长时间,TimeUnit单位),超时为10秒,但它永远不会回来。有没有人知道这个或解决方案的原因是什么?
答案 0 :(得分:0)
根据oracle docs&#34; offer(E e,long timeout,TimeUnit unit) 将指定的元素插入此队列的尾部,等待指定的等待时间,以便在队列已满时空间可用。&#34;
但是当队列变满时会出现问题。所以提供方法在那里无限等待。 有2种解决方法可以解决问题。 1.增加队列大小 2.调用poll()
在我的情况下,必须对具有此队列的对象执行清理,因此在不使用此队列之前无法执行清理。所以我调用了poll()方法来取消阻止offer(),然后可以毫无问题地清理。 增加队列大小也解决了问题,因为它从未达到完全状态。