在查看线程池ThreadPoolExecutor源码时,发现其中addWorker方法中出现了retry:。之前没有见过,因此了解下。

// ThreadPoolExecutor中部分源码private boolean addWorker(Runnable firstTask, boolean core) {retry:for (;;) {int c = ctl.get();int rs = runStateOf(c);// Check if queue empty only if necessary.if (rs >= SHUTDOWN &&! (rs == SHUTDOWN &&firstTask == null &&! workQueue.isEmpty()))return false;for (;;) {int wc = workerCountOf(c);if (wc >= CAPACITY ||wc >= (core ? corePoolSize : maximumPoolSize))return false;if (compareAndIncrementWorkerCount(c))break retry;c = ctl.get();  // Re-read ctlif (runStateOf(c) != rs)continue retry;// else CAS failed due to workerCount change; retry inner loop}}

其中retry只是代表一个标签,并不是关键字,可以随便命名。使用方法是在循环语句之前,一般为多重循环,单重循环下,breakcontinue就能达到使用。

breakcontinue只作用于当前循环,作用分别为中断当前循环和中断本次循环。

示例代码

public static void main(String[] args) {int k = 0;retry:for (int i = 0; i < 5; i++ ){for (int j = 0; j < 5; j++){//if (j == 3)    // 0// break ;      // 1// continue ;   // 2// break retry; // 3// continue retry;  // 4k++;System.out.println(i + "  =  " + j);}System.out.println(k);}System.out.println("end...");}

执行结果:

示例代码:
会打印所有,共25条数据,且最后会打印 end…
1 = 0

4 = 2
4 = 3
4 = 4
25 (打印了 k)
end…

开启0 、1,即 break 语句

当 j == 3 时,跳出本层循环,执行下一层循环
0 = 0
0 = 1
0 = 2

4 = 0
4 = 1
4 = 2
15 (打印了 k)
end…

开启 0、2 ,即continue 语句

j == 3时,跳过,执行下次循环
4 = 0
4 = 1
4 = 2
4 = 4
20 (打印了 k )
end…

开启0、3,

即 j == 3 时,直接跳出了整个循环
0 = 0
0 = 1
0 = 2 (没有打印 k)
end…

开启 0、4

当 j==3,时,中断循环,移至 标签 retry处,进行下一次循环。
0 = 0
0 = 1
0 = 2
1 = 0
1 = 1
1 = 2
2 = 0
2 = 1
2 = 2
3 = 0
3 = 1
3 = 2
4 = 0
4 = 1
4 = 2 (与 break 的区别就是没有打印 k)
end…

java中retry的使用相关推荐

  1. java中的字符retry: 是什么?

    在看源码时,出现了retry: ,这个是什么意思?之前没有接触过,那先来一个简单的例子. public void testRetry() {int i = 0;retry: //① while (tr ...

  2. 万字图文 | 学会Java中的线程池,这一篇也许就够了!

    来源:一枝花算不算浪漫 线程池原理思维导图.png 前言 Java中的线程池已经不是什么神秘的技术了,相信在看的读者在项目中也都有使用过.关于线程池的文章也是数不胜数,我们站在巨人的肩膀上来再次梳理一 ...

  3. Java中的动态代理详解

    前言 Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执 ...

  4. JAVA中的各种引用

    JAVA中引用的分类 强引用 软引用 表示一个有用但是非必须的对象. 弱引用 表示希望在下一次垃圾回收时回收的对象 虚引用 主要用于监控对象何时被回收 实现 Reference Reference是软 ...

  5. Java中J.U.C包下锁的基础-AQS分析

    目录 序言: 1:什么是AQS 2:ReentrantLock(独享式) 3:Semaphore(共享式) 序言: 对于锁的作用,简单保证临界区(多个线程,进程同时访问的区域,最终我们希望只有一个线程 ...

  6. interupt java_基于JDK8总结java中的interrupt

    1. interrupt知识点 以下总结基于JDK8 本文不会完整说明interrupt,只会罗列一些比较重要的点.完整了解Thread.interrupt可以看参考资料. 以下的一些理解新的有助于理 ...

  7. 一文弄懂Java中线程池原理

    在工作中,我们经常使用线程池,但是你真的了解线程池的原理吗?同时,线程池工作原理和底层实现原理也是面试经常问的考题,所以,今天我们一起聊聊线程池的原理吧. 为什么要用线程池 使用线程池主要有以下三个原 ...

  8. Java中的goto

    一. Java中的goto关键字 在C/C++中,goto常被用于跳出多重循环.但goto 语句的使用往往会使程序的可读性降低,所以 Java 不允许 goto 跳转.实际上,自从"goto ...

  9. java中实现具有传递性吗_Java中volatile关键字详解,jvm内存模型,原子性、可见性、有序性...

    一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...

最新文章

  1. android 系统的切图方式_UI设计切图规范
  2. kali linux状态栏显示网速
  3. ubuntu18.04安装gcc7.3.0g++7.3.0
  4. 洛谷 P3627 [APIO2009]抢掠计划 题解
  5. yum安装最新的 LNMP
  6. Linux RAID磁盘阵列
  7. 快速搭建论坛系统看这里,社交系统ThinkSNS助你快人一步!!!
  8. Linux 进程间通讯方式 pipe()函数
  9. MVC中Action参数绑定的过程
  10. 中学计算机排课系统论文,高校智能排课系统
  11. html统计在线人数代码,网站在线人数以及历史访问人数的统计代码
  12. rand()和rand_r()的区别
  13. 如何写好博客——常用标点符号易错点正确用法汇总
  14. 2022软件测试技能 Fiddler HTTP抓包调试工具完整详细教程
  15. 测试网页版淘宝购物车
  16. java登录无线路由器_获取WiFi路由器的唯一标识符
  17. 达达集团IPO,新零售基础设施第一股
  18. 【Bard】来自谷歌的“吟游诗人”
  19. 一看就懂→专票电子化的三条实现路径
  20. qrcode实现二维码

热门文章

  1. 客户体验是什么?如何提升用户体验从而提高产品成单率?必读!
  2. xtrabackup 实现mysql的全量备份与增量备份
  3. 你知道为什么zip始终不兼容rar吗?
  4. Eclipes下载安装
  5. ubuntu 安装eclipes
  6. 做笔记就用印象笔记,支持录音做笔记(附插件下载,一键将网页内容保存笔记中进行编辑)...
  7. 毕业设计 STM32老人防摔倒报警系统 - 物联网 嵌入式 单片机
  8. java 彩色图片变为灰色,即图片灰度化
  9. 小强机器人用户手册和教程目录
  10. 信号与系统公式笔记(5)