当前位置: 首页 > news >正文

ThreadPoolExecutor中的addWorker方法

在看线程池源码的时候看到了这么一段代码

private boolean addWorker(Runnable firstTask, boolean core) {retry:for (int c = ctl.get();;) {// Check if queue empty only if necessary.if (xxx)return false;for (;;) {if (xxx)return false;if (xxx)break retry;if (xxx)continue retry;}}    

第一眼看到 retry:break retry;continue retry; 这三段代码,我是一脸懵逼的,我去,这是个什么鬼玩意?!咋见都没见过?

后来百度了下这玩意叫“标签(label)”,顾名思义,就是一个标记,和跳到指定地方的一种用法,类似于插眼-传送的关系,插过眼之后,如果需要就能直接传送到插眼的地方,这么说是不是好理解了,哈哈哈哈

实际上java中 break的语法是

break [label];  \\ 结束循环,并跳到指定的标签处

continue也是同理

continue [label]; \\ 跳出当前循环,并跳到指定的标签处

那也就是说开头第一行的 retry: 其实就是定义一个标签


好了,知道了语法结构,那就可以大致的理解源码的写法含义了:
break retry; 用于结束整个双层的循环,如果没有了标签,则只会结束内层的循环,外层的循环还是会继续执行的!

continue retry; 用于跳过双层循环当前的循环,注意两层的循环一起结束,如果不加 标签的话,是只会跳过内层的当前循环,并不会跳过外层的当前循环的!

知道了这玩意的具体的涵义之后,只能说大师就是大师,我只能卧槽、666了…

http://www.lryc.cn/news/28048.html

相关文章:

  • 9 有线网络的封装
  • Linux----网络基础(2)--应用层的序列化与反序列化--守护进程--0226
  • uipath实现滑动验证码登录
  • openai-chatGPT的API调用异常处理
  • css实现音乐播放器页面 · 笔记
  • buu [NPUCTF2020]这是什么觅 1
  • Restful API 设计规范
  • sigwaittest测试超标的调试过程
  • Python进阶-----面对对象4.0(面对对象三大特征之--继承)
  • 九龙证券|利好政策密集发布,机构扎堆看好的高增长公司曝光
  • stm32CubeIDE FMC 驱动LCD(8080)
  • Java 数据类型
  • Prometheus 监控云Mysql和自建Mysql(多实例)
  • Vue3中的h函数
  • 阿尔法开发板 IMX6ULL 说明
  • Altium Designer19 #学习笔记# | 基础应用技巧汇总
  • Python 元类编程实现一个简单的 ORM
  • 《C++ Primer Plus》第18章:探讨 C++ 新标准(7)
  • Redis学习(二):Redis安装测试
  • Vector - CAPL - 简介及数据结构
  • 20230304英语学习
  • 【基础算法】单链表的OJ练习(3) # 移除链表元素 # 相交链表 #
  • 【自用】SpringBoot项目通用类整理
  • 动态规划法(总述)多阶段决策最优化问题
  • MySQL跨服务器数据映射
  • 利用反射实现通过读取配置文件对类进行实例化-课后程序(JAVA基础案例教程-黑马程序员编著-第十二章-课后作业)
  • 1.2 CSS文本属性
  • SpringCloud之认识微服务
  • 【go语言之thrift协议二之server端分析】
  • 【办公类05-03】Python批量修改文件名前面的序号(已有的序号错了,需要改成正确的号码)