对于Java中的ArrayBlockingQueue,queue.add(element)是否曾经锁定过它所在的线程?我有一个运行着数十个线程的应用程序,所有这些线程都将信息放入一个ArrayBlockingQueue中。线程不能承受任何短时间的锁定。如果它们都将对象放入队列中,则add方法会立即继续运行并让队列在将来将对象放入自身中,还是会等到将其实际放入队列中后再进行处理?

最佳答案

ArrayBlockingQueue是Qu​​eue的实现,它另外支持以下操作:在检索元素时等待队列变为非空,并在存储元素时等待队列中的空间变为可用。

如果可以在不超过队列容量的情况下立即执行此操作,则add方法将指定的元素插入此队列的尾部;如果此队列已满,则在成功时返回true并抛出IllegalStateException。

试图将一个元素放入一个完整的队列将导致操作阻塞;从空队列中取出一个元素的尝试也会类似地阻塞。

创建后,容量将无法更改。

09-08 11:02