public class T04_ConcurrentQueue {
static ConcurrentLinkedQueue queue = new new ConcurrentLinkedQueue<>();
static {
for(int i = 0; i < 100; i++){
queue.offer(i);
}
}
public static void main(String[] args) {
for(int i = 0; i < queue.size(); i++){
System.out.println(queue.poll())
}
}
}
因为你每次取,queue.size都在不断变小啊。。。你去50次的时候,size刚好到50,就结束了,你改成这样就好了:
public static void main(String[] args) {
int size = queue.size();
for(int i = 0; i < size; i++){
System.out.println(queue.poll());
}
}
你在不断的往外弹元素,queue的size也在变小
这种队列取size慢啊 你可以用他里面的方法判断队列里面有没有值 用 while循环
再说你的代码,显然你是想把queen所有元素都删除并打印出来,那么循环终止条件就是队列不是空(长度不是0)
在你的代码中,每次循环后,队列长度N减少了1,而每次循环i进行+1,所以i什么时候会追上队列长度呢? N/2次循环后(N为奇数、偶数可能不太一样了,自己试吧)。
示例,参考下面的代码,把queen所有元素都删除并打印出来
public class T04_ConcurrentQueue {
static ConcurrentLinkedQueue queue = new ConcurrentLinkedQueue<>();
static {
for (int i = 0; i < 100; i++) {
queue.offer(i);
}
}
public static void main(String[] args) {
while (queue.size() > 0) {
System.out.println(queue.poll());
}
}
}
当然,如果你只是要循环一边queen,那么不要使用poll,
示例,遍历队列
public class T04_ConcurrentQueue {
static ConcurrentLinkedQueue queue = new ConcurrentLinkedQueue<>();
static {
for (int i = 0; i < 100; i++) {
queue.offer(i);
}
}
public static void main(String[] args) {
Iterator iterator = queue.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
用queue.isEmpty()判断比queue.size()判断性能好很多,也不会出错