2012-02-18 6 views
2

私はあるスレッドでループ(本質的に24/7)を実行し、並列処理を行うために他の多くのスレッドにアクセスする、いくつかの大規模な分析タスクを実行します。現在、定数を使用してタスクを送信するために、他のアクティブなスレッドの数を設定しています。日中、私はこれをより小さい値(例えば、4)に設定して、私のマシンのリソースの一部を私のインタラクティブな使用に利用できるようにしたいと思います。一晩(または私のマシンを無人で暇つぶしにする)私は、プログラムがより多くのスレッド(例えば、8)を使用したいと思います。現在、プログラムの停止、定数の変更、再構築、プログラムの再起動(私は8つのスレッドをすべて再起動する必要があります)です。これは定期的に行うのが面倒になってきています。実行中のプロセス外からJava変数の値を変更する

私はプログラムの動作を変更するためにJavaの外部から単一のコマンド/スクリプトを入力するように単純なシステムを設定したいので、実行中のままで、入力に基づいてアイドル状態のスレッドの数を変えます。私はSOの答えを探し、これが明らかに環境変数では不可能であることを知っています。私は、2つの可能性を考えることができます:テキストファイルに値を設定し、ループの各サイクルでその値を読み取ります。私のプログラムが対話するMySQLデータベースに値を格納します。

これらの解決策は私には役に立ちますが、実行中のプロセス外からJavaの「構成変数」にアクセスできる他の(標準的な)方法があるかどうかを知ることに興味があります。

関連性がある場合は、Eclipse内からプロセスを実行しています。

編集:ちょうど別の可能性を考えた:USR1とUSR2信号...

答えて

1

あなたはJMXを探しています:

http://docs.oracle.com/javase/tutorial/jmx/index.html
http://java.sun.com/developer/technicalArticles/J2SE/jmx.html(サンプルコード)

あなたはドンが」それですべてを手に入れたい場合は、起動時にプロセスがその設定を読み込む.propertiesファイルを使用することができます。スレッドが変更をファイルで監視し、変更したとき(編集したため)、再度読み込んでプログラムの動作を変更します。 (Java 7にはファイル監視機能が組み込まれていますが、以前のバージョンでは自分でコードを作成する必要がありますが、Web上で例を見つけることができます)

+0

はい、ファイルの監視/読み取りは、私がすでに傾いているが、あまりクラージーなことを望んでいない解決策です。 JMXはきちんとしているように見えますが、実際には個人的な利便性だけが残念です。 –

+0

Springフレームワークは、JMXを@ManagedResourceのような注釈を使って実装するのはかなり簡単です。 – GreyBeardedGeek

1

特定のポートで常に接続を待っていたスレッドを追加し、そのポート上のプログラムにメッセージを送る簡単なプログラム(おそらくlocalhostから)。このメッセージを受信すると、プログラムは必要な設定を変更できます。

+0

これはJMXがあなたに与えるものなどです。 –

+0

面白い考え。メインスレッドはすでにポート8800でWebサーバープロセスを実行しているので、これらの要求を解釈することができます。 –

+1

「なぜあなたはそれを私たちの資産の1つとして挙げませんでしたか?」 - プリンセスブライド:) –

関連する問題