当我们阅读线程池ThreadPoolExecutor.execute(Runnable command)源码的时候,会发现在代码中,有retry的使用。如下所示:
在日常工作中,几乎很少看到有retry的使用,并且break retry与continue retry又有什么区别呢?针对与这些疑问,我们来做个试验的例子,看看它具体的表现是怎样的。下面就是试验例子:
public class TestRetry {
public static void main(String[] args) {
case1();
case2();
case3();
case4();
case5();
case6();
}
public static void case1() {
System.out.println("-------------case1 for all---------------");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
System.out.println("batchNums=" + i + " nums=" + j);
}
}
}
public static void case2() {
System.out.println("-------------case2 break---------------");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
if (j == 2) {
break;
}
System.out.println("batchNums=" + i + " nums=" + j);
}
}
}
public static void case3() {
System.out.println("-------------case3 continue---------------");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
if (j == 2) {
continue;
}
System.out.println("batchNums=" + i + " nums=" + j);
}
}
}
public static void case4() {
System.out.println("-------------case4 continue+retry---------------");
retry:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
if (j == 2) {
continue retry;
}
System.out.println("batchNums=" + i + " nums=" + j);
}
}
}
public static void case5() {
System.out.println("-------------case5 break+retry---------------");
retry:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
if (j == 2) {
break retry;
}
System.out.println("batchNums=" + i + " nums=" + j);
}
}
}
public static void case6() {
System.out.println("-------------case6 break+muse---------------");
muse:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
if (j == 2) {
break muse;
}
System.out.println("batchNums=" + i + " nums=" + j);
}
}
}
}
执行结果如下所示:
【总结】
综合上面的例子我们能够得到如下结论: