Ant*_*arf 2 java spring multithreading
例如,这是我在 Spring Boot 代码中看到的内容(在catch带有webServer变量的块中):
@Override
public final void refresh() throws BeansException, IllegalStateException {
try {
super.refresh();
}
catch (RuntimeException ex) {
WebServer webServer = this.webServer;
if (webServer != null) {
webServer.stop();
}
throw ex;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么不只是做this.webServer.stop()呢?
局部变量的用途是什么webServer?
赋值的主要目的是避免在空检查之后和调用之前由并发线程设置NullPointerException为 时产生 a 。this.webServernullwebServer.stop()
也就是说,没有局部变量:
this.webServer != null-> truethis.webServer = nullthis.webServer.stop()-> 可能会导致NullPointerException(取决于步骤 2 中更改的可见性,这可能并不总是发生;竞争条件)。在其他形式的代码中,与重复引用字段相比,将字段分配给局部变量也可以带来性能优势。
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |