最近在看线程池的代码时候发现一块特殊的循环:
这个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就是跳出当前的循环?
有了这个以后 ,很多地方直接跳出整个多层循环的条件就不用再复杂判断了。