Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java静态块不在线程中运行_Java_Multithreading_Static - Fatal编程技术网

java静态块不在线程中运行

java静态块不在线程中运行,java,multithreading,static,Java,Multithreading,Static,我正在使用一个名为App1java应用程序中的static块加载properties文件 public class Configuration{ static { System.out.println("static "); PropertyConfigurator.configure("./TwitterLog4j.properties"); log = Logger.getLogger(Configuration.class.getName()); con

我正在使用一个名为
App1
java应用程序中的
static
块加载
properties文件

public class Configuration{ 
static {
    System.out.println("static ");
    PropertyConfigurator.configure("./TwitterLog4j.properties"); 
    log = Logger.getLogger(Configuration.class.getName());
    configProp = new Properties();

    try {

        configProp.load(Configuration.class.getClassLoader().getResourceAsStream("TwitterConfig.properties"));

    } catch (IOException e) {
        throw new RuntimeException("TC100: Unable to load the connector configuration file. Configuration file is missing or is invalid.");
    } 

    CONSUMER_KEY = configProp.getProperty("APPKEY");
    CONSUMER_SECRET = configProp.getProperty("APPSECRET");

    }
}
在创建了
App1
jar
之后,我在
App2
中使用它,其中我使用threading
(Executors.newFixedThreadPool(10))
通过调用类
ConnWrapper
的方法运行
App1
(参见下面的流程)。但是我的静态块似乎只运行一次,JVM是否会在我的
App1
完成时保持类的加载

App1的类流

ConnWrapper Class --> Conn Class --> ConnInterface Class --> Configuration Class 
*( -->  = calls method of)

这是静态块,按照java规范,它只加载了一次,那么加载了多少次
我们调用该方法会得到相同的结果,所以这里不需要线程概念

每个jvm每个类加载器加载一次静态块。变量“configProp”是可用于访问属性的类的静态变量,因此为什么需要多次加载它

public class Configuration{ 

public static Properties configProp;

static{
    reloadProperties();
}

public static void reloadProperties()
 {
    System.out.println("static ");
    PropertyConfigurator.configure("./TwitterLog4j.properties"); 
    log = Logger.getLogger(Configuration.class.getName());
    configProp = new Properties();

    try {

        configProp.load(Configuration.class.getClassLoader().getResourceAsStream("TwitterConfig.properties"));

    } catch (IOException e) {
        throw new RuntimeException("TC100: Unable to load the connector configuration file. Configuration file is missing or is invalid.");
    } 

    CONSUMER_KEY = configProp.getProperty("APPKEY");
    CONSUMER_SECRET = configProp.getProperty("APPSECRET");

    }
}

您好@ramp,我需要在运行时更改属性文件。编写代码后,我看到属性文件发生了更改,但结果没有显示出来。我将删除静态块和变量,并改用构造函数。不,应用程序属性通常是静态数据。如果属性文件发生更改,您必须重新加载它。请参阅我文章中的编辑,当JVM加载类时,静态块保证只运行一次。你的问题和期望不明确,你想实现什么?