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加载类时,静态块保证只运行一次。你的问题和期望不明确,你想实现什么?