说明:其实retry就是一个标记,标记程序跳出循环的时候从哪里开始执行,功能类似于goto。retry一般都是跟随者for循环出现,第一个retry的下面一行就是for循环,而且第二个retry的前面一般是 continue或是 break。
retry本身也可以是其它属性名,如 retry1,retry2等等,遵循java的命名规则可以随意命名。
测试案例:
package com.sxf.test.thread; /** * Retry 的使用 * @author sxf * */ public class RetryTest { public static void main(String[] args) { //testRetry1(); //testRetry2(); testRetry3(4); } /** * 当i=5的时候,回到a行,程序继续执行,此时i=5,然后继续i++向下执行循环。 * 最终输出的i的打印结果:0,1,2,3,4,6,7,8,9 */ public static void testRetry1(){ retry://(a) for(int i=0;i<10;i++){ while(i==5){ continue retry; } System.out.println("RetryTest.testRetry()i="+i); } } /** * 当i=5的时候,回到b行,程序继续执行,此时i=5,还是会进入while循环,因此是一个死循环。 * 最终输出的i的打印结果:0,1,2,3,4 */ public static void testRetry2(){ for(int i=0;i<10;i++){ retry1://(b) while(i==5){ continue retry1; } System.out.println("RetryTest.testRetry()i="+i); } } /** * break retry 配合使用,即便是多层循环,也可以跳出到retry: 标记处的循环。 * @param a * @return */ public static boolean testRetry3(int a){ retry: for (;;) { System.out.println("RetryTest.testRetry3()retry="+a); if(a==1) return false; for (;;) { if(a==2) return false; if(a==3) break retry; if (a==4) continue retry; // else CAS failed due to workerCount change; retry inner loop } } System.out.println("RetryTest======>执行最后"); return false; } }