最近在学习并发的时候,经常看到这种写法:
for (;;) {
.......;
}
突然觉得自己不理解在这种写法的意义;
测试代码:
public static void main (String[] args) {
for (;;) {
System.out.println(123);
}
}
毫无疑问,这种会无限循环,没有结束,所以使用这种写法必须要有跳出循环代码。
看一个java源码:
private Node enq(final Node node) {
for (;;) {
Node t = tail;
if (t == null) { // Must initialize
if (compareAndSetHead(new Node()))
tail = head;
} else {
node.prev = t;
if (compareAndSetTail(t, node)) {
t.next = node;
return t;
}
}
}
}
这是一个自旋操作,因为t变量无法保证可以使用,所以有了一个if-else判断;
在这个例子上,就可以知道,使用这种写法的时候,要有外部变量,变量不能保证可以使用,循环体内部有根据不同情况,选择执行不同的代码,必须有一个选择可以跳出循环。
现在写一个满足这些条件的无限循环。
public static void main (String[] args) {
int i = 1;
String str;
for (;;) {
if (i == 1) {
i = 2;
} else if (i == 2) {
i = 3;
} else if (i == 3) {
str = "跳出循环";
break;
}
}
System.out.println(str);
}
这样再看一些源码的时候,就不会看不懂这样代码的含义了。