• 締切済み

複数のJavaプログラムでデータを共有する方法について

レベルの低い質問だとは思うのですが、相談にのってください。 Javaでコンソールプログラムを作っています。 コマンドプロンプトを複数立ち上げ、同じJAVAプログラムを同時に実行します。(プログラムは同じですが、処理内容はそれぞれ異なります。並列な処理です。) これら複数のプログラム同士でデータ(処理の進捗状況など)を共有するにはどうすればいいでしょうか。(そもそもそんなことができるのでしょうか) 今考えているのは、共有データ用のテキストファイルを1つ作り、それを各プログラムが参照(読んだり書き込んだり)する、ということ考えています。しかし、これだと複数のプログラム同士が同時にファイルを読み書きするようなタイミングがあるかもしれず、思ったような動作をしないかもしれません。 そこで、質問です。 (1)今回のような場合(コマンドプロンプトを複数立ち上げ、同じJAVAプログラムを同時に実行)で、データ共有に使えそうなトピックや方法があれば、お教えください。ヒントでもなんでもいいです。(とりあえず、ちょっとした付け焼刃でなんとか動いてほしいので……) (2)「コマンドプロンプトを複数立ち上げ、同じJAVAプログラムを同時に実行」しているのは、単に私の技術が低いからです。今後プログラムを根本的に書き直して改良するために、今後どのようなJavaのトピックを勉強すればいいでしょうか。 乱文失礼いたしました。どうかよろしくお願いします。

みんなの回答

回答No.3

>レベルの低い質問だとは思うのですが、相談にのってください。 「マルチスレッドって何ですか?」みたいな質問に比べたら全然、良質問だと思いますけど。(というより普段は全く質問しないため、こういう長文タイプが好ましかったりする。) (1)の答え→ synchronizedブロック、java.lang.Objectクラスのwait/notify/notifyAllメソッド マルチスレッドプログラミング 5章 スレッドの同期 5.2. スレッド間の待ち合わせ http://www.techscore.com/tech/J2SE/Thread/5-2.html (2)の答え→ ソケットプログラミング JavaでHello World > ソケット編 http://www.hellohiro.com/socket.htm HTTP通信によるサーブレットプログラミングなら、基本的にはややこしい所(各スレッドの制御など)は全て、Tomcatのようなサーブレットコンテナがちゃんと内部で処理してくれるのでいいかなあとは思うのですが、出力先がブラウザなどのGUIではなく、標準出力などのCUI上でいいのでしたらデータグラム通信やマルチキャストなどもありかな、と思います。

  • JavaZou
  • ベストアンサー率50% (1/2)
回答No.2

(2)への回答です。 プログラムの内容が抽象的なので本当に実現できるかわかりませんが、「スレッド化」できるのではないかと思います。 現在2つ動かしているプログラムをスレッドとして動かします。 スレッドを起動したクラスにそれぞれのクラスが状態を報告するか、スレッド化するクラスにpublicメソッドをつけて、もうひとつ状態監視スレッドで定期的に確認することで実現できるのではないでしょうか。 1つのVMで動くので圧倒的に性能はいいですよ。 調査すべきキーワードは「スレッド」です。

参考URL:
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Thread.html
  • dekopa-
  • ベストアンサー率42% (161/378)
回答No.1

・ファイル共有 排他モードで(あるプログラムが読み書きしている間、他のプログラムはアクセスできない)短い時間で読み書きすれば、遅延は最小限で済みます。 ・ネットワーク どれか一つがサーバーになって、情報を保持します。他はクライアントになって、なんらかのプロトコル(独自に文字列を送受信するとか、いっそhttpでやるとか)で通信します。 ・JMS 参考URL。メッセージを処理する専用のAPIがあります。JMSを処理するプロセスが別途必要。

参考URL:
http://ja.wikipedia.org/wiki/Java_Message_Service

関連するQ&A