Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于块集合中的每个_Java_Multithreading_Java.util.concurrent_Blockingqueue - Fatal编程技术网

Java 对于块集合中的每个

Java 对于块集合中的每个,java,multithreading,java.util.concurrent,blockingqueue,Java,Multithreading,Java.util.concurrent,Blockingqueue,假设我有一个LinkedBlockingQueue的实例;并希望用于此队列中的每个队列: for(Object obj : queue) { //do smth } 如果此时队列为空,该代码将如何运行?它是否会阻止运行,直到队列不为空 谢谢 它不阻塞,只是不进入循环分支 您可以轻松检查: LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>(); for (Object obj : queue)

假设我有一个LinkedBlockingQueue的实例;并希望用于此队列中的每个队列:

for(Object obj : queue)  {

//do smth
}
如果此时队列为空,该代码将如何运行?它是否会阻止运行,直到队列不为空


谢谢

它不阻塞,只是不进入循环分支

您可以轻松检查:

LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>();
for (Object obj : queue) {
    System.out.println("Inside the loop, is empty? " + queue.isEmpty());
}
System.out.println("Not blocking, is empty? " + queue.isEmpty());
LinkedBlockingQueue队列=新建LinkedBlockingQueue();
对于(对象对象对象:队列){
System.out.println(“在循环内部,是否为空?”+queue.isEmpty());
}
System.out.println(“未阻塞,是否为空?”+queue.isEmpty());

输出:
未阻塞,是否为空?true

它不阻塞,只是不进入循环分支

您可以轻松检查:

LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>();
for (Object obj : queue) {
    System.out.println("Inside the loop, is empty? " + queue.isEmpty());
}
System.out.println("Not blocking, is empty? " + queue.isEmpty());
LinkedBlockingQueue队列=新建LinkedBlockingQueue();
对于(对象对象对象:队列){
System.out.println(“在循环内部,是否为空?”+queue.isEmpty());
}
System.out.println(“未阻塞,是否为空?”+queue.isEmpty());
输出:
未阻塞,是否为空?true

否,它不会阻塞()

Java的
for
——每个循环从集合中获取
迭代器,并使用该迭代器遍历集合。根据,LinkedBlockingQueue
集合的迭代器反映了构造迭代器时队列的状态:

返回的迭代器是一个“弱一致”迭代器,它永远不会抛出
ConcurrentModificationException
,并保证在构造迭代器时遍历元素

由于在构造迭代器时队列是空的,迭代器不会等待更多数据可用,并报告它没有其他元素。当然,如果在构造迭代器后集合变为非空,迭代器可能会返回一些新插入的项。

否,它不会阻塞()

Java的
for
——每个循环从集合中获取
迭代器,并使用该迭代器遍历集合。根据,LinkedBlockingQueue
集合的迭代器反映了构造迭代器时队列的状态:

返回的迭代器是一个“弱一致”迭代器,它永远不会抛出
ConcurrentModificationException
,并保证在构造迭代器时遍历元素

由于在构造迭代器时队列是空的,迭代器不会等待更多数据可用,并报告它没有其他元素。当然,如果在构造迭代器后集合变为非空,迭代器可能会返回一些新插入的项。

哈哈哈:-)我已经测试了相同的代码,但使用了另一条消息哈哈哈:-)我已经测试了相同的代码,但使用了另一条消息