从正在运行的进程外部更改Java变量的值

时间:2012-02-18 06:00:19

标签: java multithreading

我有一个Java程序执行一些大型分析任务,在一个线程中运行一个循环(基本上是24/7)并访问许多其他线程来进行并行处理。我目前正在配置其他活动线程的数量,以使用常量发送任务。在白天,我喜欢将其设置为较小的值(例如,4),以保留我的一些机器资源供我交互使用。一夜之间(或其他时候我让机器无人看管)我希望程序使用更多的线程(比方说8)。目前我正在暂停程序,更改常量,重建和重新启动程序(我必须重新启动所有8个线程)。这经常变得乏味。

我想建立一个简单的系统来从外部Java键入一个命令/脚本来改变程序的行为,这样它就可以保持运行但是根据我的输入改变了空闲线程的数量。我搜索了SO的答案,并且知道环境变量显然不可能。我可以想到两种可能性:在文本文件中设置一个值,并在循环的每个循环中读取它;并将值存储在我的程序与之交互的MySQL数据库中。

虽然这些解决方案对我有用,但我很想知道是否还有其他(更标准的?)方法可以从正在运行的进程外部访问Java“配置变量”。

如果相关,我正在Eclipse中运行流程。

编辑:想到另一种可能性:USR1和USR2发出信号......

2 个答案:

答案 0 :(得分:1)

您正在寻找JMX:

http://docs.oracle.com/javase/tutorial/jmx/index.html
http://java.sun.com/developer/technicalArticles/J2SE/jmx.html(示例代码)

如果您不想全力以赴,可以使用您的进程在启动时读取的.properties文件进行配置。让线程监视文件是否有变化,当它发生变化时(因为你编辑过它),重新阅读它并相应地改变程序的行为。 (Java 7内置了文件监控,以前的版本你必须自己编写代码,但可以在网上找到示例)

答案 1 :(得分:1)

您可以添加一个始终等待特定端口上的连接的其他线程,并编写一个简单的程序将消息发送到该端口上的程序(可能只是来自localhost)。收到此消息后,程序可以更改所需的任何设置。