Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 - Fatal编程技术网

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

从正在运行的进程外部更改Java变量的值,java,multithreading,Java,Multithreading,我有一个Java程序执行一些大型的分析任务,在一个线程中运行一个循环(基本上是24/7),并访问许多其他线程以进行并行处理。我目前正在配置其他活动线程的数量,以便使用常量将任务发送到。在白天,我喜欢将其设置为一个较小的值(例如,4),以使我的机器的一些资源可供交互使用。一夜之间(或者其他时候我让我的机器无人看管),我希望程序使用更多的线程(比如8个)。目前我正在停止程序、更改常量、重建并重新启动程序(我必须重新启动所有8个线程)。定期这样做越来越乏味 我想建立一个简单的系统,从Java外部键入一

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

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

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

如果相关的话,我将在Eclipse中运行这些进程


编辑:刚刚想到另一种可能性:USR1和USR2信号…

您正在寻找JMX:


(示例代码)


如果不想全力以赴,可以使用进程在启动时读取的
.properties
文件进行配置。让一个线程监视文件的更改,当它确实更改时(因为您编辑了它),重新读取它并相应地更改程序的行为。(Java 7内置了文件监控,以前的版本您必须自己编写,但可以在web上找到示例)

您可以添加一个额外的线程,该线程总是在某个特定端口上等待连接,并编写一个简单的程序向该端口上的程序发送消息(可能只是从本地主机)。收到此消息后,程序可以更改它想要的任何设置。

这就是。。。正是JMX给你的,还有更多。有趣的想法。主线程已经在端口8800上运行了一个Web服务器进程,所以我可以解释这些请求。“你为什么不把它列为我们的资产之一?!”-公主新娘:)它还有一件大屠杀斗篷!是的,文件监视/读取是我已经倾向于使用的解决方案,但我希望它不那么麻烦。JMX看起来很整洁,但出于真正的个人方便,可能有些过分了。Spring框架使得JMX通过注释(如@ManagedResource)实现起来非常简单