栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中的retry:标志

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中的retry:标志

在线程池执行任务的源码中看到的,没接触过,所以当时记录了下来学习后补充。 具体作用:

就是一个标志位,用来定位的,用于更加优雅更加细化的跳出循环,常见搭配是continue retry 和break retry,举例说明

普通for循环
public static void main(String[] args) {
    for (int i = 0; i < 2; i++) {
        System.out.println("这是 i:"+i);
        for (int a = 0; a < 3; a++) {
            System.out.println("这是 j:"+a);
        }
    }
}

打印结果:

一次i,三次a,输出没毛病,如果我想一次i,一次a,怎么控制?常见选择就是break
public static void main(String[] args) {
    for (int i = 0; i < 2; i++) {
        System.out.println("这是 i:"+i);
        for (int a = 0; a < 3; a++) {
            System.out.println("这是 j:"+a);
            break;
        }
    }
}

还有一种选择,就是continue retry:

可以看到,执行一次I, continue retry就会跳到最外层循环,剩余的a就不会打印,所以这也是为什么刚才说的retry只是一个标志位,标注着一个定位。 如果现在业务需求是某种条件满足下,只打印一次i,一次a,该怎么控制?那当然就是两个break
public static void main(String[] args) {
    for (int i = 0; i < 2; i++) {
        System.out.println("这是 i:"+i);
        for (int a = 0; a < 3; a++) {
            System.out.println("这是 j:"+a);
            break;
        }
        break ;
    }
}

又或者用break retry

这里可以看到break retry 可以直接跳出两层循环 进阶用法以及注意事项: (1)标志位不一定是retry,任意字母都可以

(2)定义多个标志位,可以实现灵活的跳转,但是一般不建议这样写,因为不好维护,复杂的循环和判断条件很难理解
public static void main(String[] args) {
    a1:
    for (int i = 0; i < 2; i++) {
        System.out.println("这是 i:"+i);
        a2:
        for (int a = 0; a < 3; a++) {
            if (a == 0) {
                continue a2;
            } else if (a == 2){
                continue a1;
            }
            System.out.println("这是 j:"+a);
        }
    }
}
(3)标志位下面必须紧跟循环体,不然会导致找不到标志位

总结:

在很深层次的递归,嵌套循环中,如果想直接跳出全部循环定位到某个位置重新执行(算法包比较多)的时候可以考虑用一下retry:这种方法,正常业务逻辑最好不要。
本文只用了for举例,其实while, do…while 等等循环也是可以的,只要是个循环体,都可以用

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/531738.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号