最近在看线程池的代码时候发现一块特殊的循环:
这个retry是怎么一回事?具体用了一个测试用例进行:
首先是一个最原始的循环:
for(int i=0;i<5;i++) {
for(int j=0;j<5;j++) {
System.out.println(i+" "+j);
if(j ==3) {
continue;//这里调用continue和不调用的打印结果是一致的
}
}
}
打印结果
0 0
0 1
0 2
0 3
0 4
1 0
1 1
1 2
1 3
1 4
2 0
2 1
2 2
2 3
2 4
3 0
3 1
3 2
3 3
3 4
4 0
4 1
4 2
4 3
4 4
因为continue是遇到也会继续, 但是加上retry以后呢?
retry:
for(int i=0;i<5;i++) {
for(int j=0;j<5;j++) {
System.out.println(i+" "+j);
if(j ==3) {
continue retry;
}
}
}
打印结果:
0 0
0 1
0 2
0 3
1 0
1 1
1 2
1 3
2 0
2 1
2 2
2 3
3 0
3 1
3 2
3 3
4 0
4 1
4 2
4 3
明显发现,在第二个循环遇到3以后就跳出来当前的循环。
那么在break中又是如何?首先是无retry
for(int i=0;i<5;i++) {
for(int j=0;j<5;j++) {
System.out.println(i+" "+j);
if(j ==3) {
break;
}
}
}
打印结果
0 0
0 1
0 2
0 3
1 0
1 1
1 2
1 3
2 0
2 1
2 2
2 3
3 0
3 1
3 2
3 3
4 0
4 1
4 2
4 3
遇到3跳出第一层循环。
retry:
for(int i=0;i<5;i++) {
for(int j=0;j<5;j++) {
System.out.println(i+" "+j);
if(j ==3) {
break retry;
}
}
}
打印结果:
0 0
0 1
0 2
0 3
加了retry后直接就只跑了一次了0 0,那能否理解为retry就是跳出当前的循环?
有了这个以后 ,很多地方直接跳出整个多层循环的条件就不用再复杂判断了。