Java 对于块集合中的每个
假设我有一个LinkedBlockingQueue的实例;并希望用于此队列中的每个队列: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)
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
,并保证在构造迭代器时遍历元素
由于在构造迭代器时队列是空的,迭代器不会等待更多数据可用,并报告它没有其他元素。当然,如果在构造迭代器后集合变为非空,迭代器可能会返回一些新插入的项。哈哈哈:-)我已经测试了相同的代码,但使用了另一条消息哈哈哈:-)我已经测试了相同的代码,但使用了另一条消息