Java 循环前的这个标记是做什么的?
我正在阅读ThreadPoolExecutor的源代码,看到了以下代码Java 循环前的这个标记是做什么的?,java,Java,我正在阅读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
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 ctl
if (runStateOf(c) != rs)
continue retry;
// else CAS failed due to workerCount change; retry inner loop
}
}
注意上面的
重试
字。它有什么作用?我以前从未见过类似的用法。有关于此语法的文档吗?重试不是关键字,而是标识符。这是一个标签。看
带有标签标识符的break语句试图将控制权转移到与其标签具有相同标识符的封闭标签语句(§14.7);该语句称为中断目标,然后立即正常完成。在这种情况下,break目标不必是switch、while、do或for语句
添加标识符不会像默认情况下那样中断最内部的封闭循环,而是会导致控制权转移到由该标签标识的代码部分
在这种情况下,当执行到达
break retry
语句时,它将转到标签retry:
,并从那里继续执行。它是循环“名称”的标记。用于从嵌套循环中退出循环(简单的break;
仅在1级以上退出),它是一个java标记的循环