私はあるスレッドでループ(本質的に24/7)を実行し、並列処理を行うために他の多くのスレッドにアクセスする、いくつかの大規模な分析タスクを実行します。現在、定数を使用してタスクを送信するために、他のアクティブなスレッドの数を設定しています。日中、私はこれをより小さい値(例えば、4)に設定して、私のマシンのリソースの一部を私のインタラクティブな使用に利用できるようにしたいと思います。一晩(または私のマシンを無人で暇つぶしにする)私は、プログラムがより多くのスレッド(例えば、8)を使用したいと思います。現在、プログラムの停止、定数の変更、再構築、プログラムの再起動(私は8つのスレッドをすべて再起動する必要があります)です。これは定期的に行うのが面倒になってきています。実行中のプロセス外からJava変数の値を変更する
私はプログラムの動作を変更するためにJavaの外部から単一のコマンド/スクリプトを入力するように単純なシステムを設定したいので、実行中のままで、入力に基づいてアイドル状態のスレッドの数を変えます。私はSOの答えを探し、これが明らかに環境変数では不可能であることを知っています。私は、2つの可能性を考えることができます:テキストファイルに値を設定し、ループの各サイクルでその値を読み取ります。私のプログラムが対話するMySQLデータベースに値を格納します。
これらの解決策は私には役に立ちますが、実行中のプロセス外からJavaの「構成変数」にアクセスできる他の(標準的な)方法があるかどうかを知ることに興味があります。
関連性がある場合は、Eclipse内からプロセスを実行しています。
編集:ちょうど別の可能性を考えた:USR1とUSR2信号...
はい、ファイルの監視/読み取りは、私がすでに傾いているが、あまりクラージーなことを望んでいない解決策です。 JMXはきちんとしているように見えますが、実際には個人的な利便性だけが残念です。 –
Springフレームワークは、JMXを@ManagedResourceのような注釈を使って実装するのはかなり簡単です。 – GreyBeardedGeek