首页 > 解决方案 > 静态代码块是否在并发环境中运行多次

问题描述

我有一个静态代码块:

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");
        }
    }


}

如果我理解正确,即使我们有并发环境,静态代码块也只会运行一次。它正确吗?

标签: javamultithreadingconcurrency

解决方案


是的,这段代码在类加载器加载类时第一次执行,并且您知道在类加载后所有方法信息和相关信息将存储在 JVM 的方法区域中,并且这些信息将由程序中的所有线程共享。所以其他线程只访问该区域的方法定义、字段、常量池信息,不再执行这样的静态块。


推荐阅读