【发布时间】:2020-06-10 08:19:50
【问题描述】:
我有一个静态代码块:
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");
}
}
}
如果我理解正确的话,即使我们有并发环境,静态代码块也只会运行一次。对吗?
【问题讨论】:
-
仅在类加载到内存时执行。这并不意味着每次实例化或调用它
-
@Stultuske “这并不意味着每次你实例化或调用它” - 所以如果我需要再次实例化该类,它不会再次调用这个块?
-
即使您根本没有实例化该类的任何实例,它也会运行。我认为在一个简单的标准 java 应用程序中,您可以说它会在应用程序启动时运行一次。在其他在运行时动态加载新类的环境中,它可能会更复杂一些。但它始终是线程安全的。
-
@Amongalen 这正是我需要知道的。所以该块将是线程安全的并且只运行一次。
-
是的,但必须加载 MyClass。
标签: java multithreading concurrency