前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试题12:请介绍一下retry: 的用法

面试题12:请介绍一下retry: 的用法

作者头像
爪哇缪斯
发布2023-05-09 21:34:58
1380
发布2023-05-09 21:34:58
举报
文章被收录于专栏:爪哇缪斯爪哇缪斯爪哇缪斯

当我们阅读线程池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);
            }
        }
    }
}

执行结果如下所示:


【总结】

综合上面的例子我们能够得到如下结论:

  • retry就是一个标记,标记对一个循环方法的操作continue/break处理点,功能类似于goto,所以retry一般都是伴随着for循环出现;
  • retry:标记的下一行就是for循环,在for循环里面调用continue/break再紧接着retry标记时,就表示从这个地方开始执行continue/break操作
  • continue+retry的效果与break相同
  • 我们可以不用retry,可以使用任何合法字符来代替retry,比如上面示例中用“muse”来代替“retry”。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爪哇缪斯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档