boolean ranAction = false;
try {
final Runnable command = barrierCommand;
if (command != null)
command.run();
ranAction = true;
nextGeneration();
return 0;
} finally {
if (!ranAction)//通过“try-finally和ranAction布尔标识”,做到这样的效果:如果command.run();抛出异常,则执行 breakBarrier(),但不阻碍异常的如常抛出
breakBarrier();
}
这里的技巧是: 通过“try-finally和ranAction布尔标识”,做到这样的效果:如果command.run();抛出异常,则执行 breakBarrier(),但不阻碍异常的如常抛出。
如果不这样做,比较一般的做法是:
try{
command.run();
......
}catch(Throwable e){
breakBarrier();
throw e; //或throw new RuntimeException(e.getMessage(), e.getCause() );
}