java retry使用

在看ThreadPoolExecutor源码时第一次遇到retry的用法,上网查了一下,大家都是在同一个地方遇到(看来大家的求经之路都差不多...),学习了以后来做个笔记,避免脑容量太小溢出了。

首先retry不是java关键字,只是一种用法,你可以自己去命名标记。

其次retry是一种“移植”跳出循环标记的用法,这个标记常常伴随循环出现,不允许单独使用。之所以说他是“移植”跳出循环标记,是因为他会将跳出循环的方式作用到它标记的那一层,就像把跳出方式移植到外面的循环了一样。

当关键字开始标记在第n层循环时,它会将结束时跟随的关键字作用在第n层。

笔者整理一下用法供大家参考。

  • continue

     public static void main(String[] args) {for (int k = 0; k < 2; k++) {System.out.println("第1层---"+k);retry_continue:for (int i = 0; i < 2; i++) {System.out.println("第1层---"+k+"第2层---"+i);for (int j = 0; j < 5; j++) {System.out.println("第1层---"+k+"第2层---"+i+"第3层---"+j);if (j == 3) {System.out.println("触发标记");continue retry_continue;}}}}}
控制台:
第1层---0
第1层---0第2层---0
第1层---0第2层---0第3层---0
第1层---0第2层---0第3层---1
第1层---0第2层---0第3层---2
第1层---0第2层---0第3层---3
触发标记
第1层---0第2层---1
第1层---0第2层---1第3层---0
第1层---0第2层---1第3层---1
第1层---0第2层---1第3层---2
第1层---0第2层---1第3层---3
触发标记
第1层---1
第1层---1第2层---0
第1层---1第2层---0第3层---0
第1层---1第2层---0第3层---1
第1层---1第2层---0第3层---2
第1层---1第2层---0第3层---3
触发标记
第1层---1第2层---1
第1层---1第2层---1第3层---0
第1层---1第2层---1第3层---1
第1层---1第2层---1第3层---2
第1层---1第2层---1第3层---3
触发标记
  • break

    static void retryBreak(){for (int k = 0; k < 2; k++) {System.out.println("第1层---"+k);retry_break:for (int i = 0; i < 2; i++) {System.out.println("第1层---"+k+"第2层---"+i);for (int j = 0; j < 5; j++) {System.out.println("第1层---"+k+"第2层---"+i+"第3层---"+j);if (j == 3) {System.out.println("触发标记");break retry_break;}}}}}public static void main(String[] args) {
//        retryContinue();retryBreak();}
控制台:
第1层---0
第1层---0第2层---0
第1层---0第2层---0第3层---0
第1层---0第2层---0第3层---1
第1层---0第2层---0第3层---2
第1层---0第2层---0第3层---3
触发标记
第1层---1
第1层---1第2层---0
第1层---1第2层---0第3层---0
第1层---1第2层---0第3层---1
第1层---1第2层---0第3层---2
第1层---1第2层---0第3层---3
触发标记