java - 静态代码块是否在并发环境中运行多次
问题描述
我有一个静态代码块:
public class MyClass {
static {
String s = "src/test/resources/dfdf.properties";
Resource r = new FileSystemResource(s);
Properties props = new Properties();
try {
props.load(r.getInputStream());
accessToken = props.getProperty("password");
locationToken = props.getProperty("username");
} catch (IOException e) {
LOG.error("We have an error for reading the access and location tokens for Brink web-service config");
}
}
}
如果我理解正确,即使我们有并发环境,静态代码块也只会运行一次。它正确吗?
解决方案
是的,这段代码在类加载器加载类时第一次执行,并且您知道在类加载后所有方法信息和相关信息将存储在 JVM 的方法区域中,并且这些信息将由程序中的所有线程共享。所以其他线程只访问该区域的方法定义、字段、常量池信息,不再执行这样的静态块。
推荐阅读
- networking - 如何通过 Elixir 监听多个端口?
- c# - c# Base64 在电子邮件附件中
- asp.net-core - ASP.NET 核心中的 ContentDispositionHeaderValue.FileName 与 IFormFile.FileName
- javascript - 在隐藏和显示元素之间切换
- typescript - 类和函数中的 TypeScript 对象
- json - 在两个微服务 golang 之间发送和读取一个 [] 字节
- excel - 在 Excel 中对齐重复项
- java - 当 ActiveMQ 故障转移传输失败时 Spring Boot 应用程序不启动
- c# - 拖动目标时更改光标
- python - Python 请求不响应正确的 html