【发布时间】:2010-10-27 22:33:35
【问题描述】:
这个问题与我之前的一个问题有关..
在那里,阻塞性被认为是一个优势。
我试图开发一些简单的代码来展示阻塞特性,但我卡住了。我只是尝试制作大小为 4 的 BlockingQueue 并尝试添加 5 个元素并最终得到 java.lang.IllegalStateException。有人可以给我看一个阻止BlockingQueue性质的代码示例吗?
public static void main(String[] args) {
BlockingQueue<String> bq = new LinkedBlockingQueue<String>(4);
try {
bq.offer("A");
bq.offer("B");
bq.offer("C");
bq.offer("D");
bq.offer("E");
System.out.println("1 = " + bq.take());
System.out.println("2 = " + bq.take());
System.out.println("3 = " + bq.take());
System.out.println("4 = " + bq.take());
System.out.println("5 = " + bq.take());
System.out.println("6 = " + bq.take());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
我使用了这个代码段。在这种情况下,我试图将 5 个元素放入大小为 4 的队列中。在这种情况下,应将 4 个元素(A、B、C、D)添加到队列中。然后我在打印时调用take() 方法。当我调用 System.out.println("1 = " + bq.take()); 时,不应该将“E”自动插入队列吗?因为它有一个免费的插槽?
【问题讨论】:
标签: java data-structures concurrency queue