Java实现循环goto跳转
Java中跳转的作用
在多层循环时,想要跳转到指定为止,这样可以让编写者的逻辑更加清晰。
跳转用法
continue retry
public static void main(String[] args) {
retry:
for (int i = 0 ; i < 5 ; i++) {
for (int j = 0 ; j < 3 ; j++) {
if (j == 1) {
continue retry;
}
System.out.println("i = " + i + " , j = " + j);
}
}
}
结果:
break retry
public static void main(String[] args) {
retry:
for (int i = 0 ; i < 5 ; i++) {
for (int j = 0 ; j < 3 ; j++) {
if (j == 1) {
break retry;
}
System.out.println("i = " + i + " , j = " + j);
}
}
}
结果:
总结
-
retry实际上就只是一个标记而已,也可以叫其他的名字,用来标记continue或者break,跳转到循环的指定位置。
-
continue retry,关键字原语意思不变,仍然是跳过本轮循环,执行下一轮循环,但是跳出位置在标记的位置。
-
break retry,关键字原语意思不变,仍然是结束循环,不执行下一轮循环,但是跳出位置在标记的位置。
源码应用
线程池添加Worker时执行的逻辑
线程池中工作线程数和线程池状态都是通过一个变量的高低位来表示的,而这个变量会用来判断新增加工作Worker是否成功,所以要使用cas锁的方式更新共享变量。线程池采用空循环等待执行,等待cas更新完毕,退出循环,而退出循环的方式就是采用retry跳转来实现。