1

別の Java プロセスから Java プロセスにウェイクアップ信号を送信する必要があります。信号を使用してそれを行うことはできますか? 私はインターネットでいくつかのものを見つけようとしましたが、見つけることができませんでした。誰でも助けてください。

4

3 に答える 3

1

同じ JVM パーツの 2 つのプロセスで混乱しています (2 つのクラスローダー?)。いずれにせよ、最も簡単な方法は、共有ローカル ソケットまたはファイルを介して通信することです。

共有メモリマップを見ることさえできます。

于 2013-02-03T00:10:27.003 に答える
1

2 つの Java スレッドを意味すると仮定すると、最も簡単な方法は、おそらく Java の待機/通知メカニズムを使用することです。Javadoc でどのように機能するかについて詳しく読むことができます: http://docs.oracle.com/javase/7/docs/api/

これがどのように機能するかを示すサンプルプログラムです。各スレッドが実行されると、代わりにスレッド ID が出力されます。

public class Main {

  public static void main(String[] args) {
    final Object notifier = new Object();                       //the notifying object
    final long endingTime = System.currentTimeMillis() + 1000;  //finish in 1 s

    Runnable printThread = new Runnable(){
      @Override
      public void run() {
        synchronized (notifier){
          while(System.currentTimeMillis() < endingTime){
            try {
              notifier.wait();
              System.out.println(Thread.currentThread().getId());
              notifier.notify();  //notifies the other thread to stop waiting
            } catch (InterruptedException e) {
              e.printStackTrace();  //uh-oh
            }
          }
        }
      }
    };

    //start two threads
    Thread t1 = new Thread(printThread);
    Thread t2 = new Thread(printThread);
    t1.start();
    t2.start();

    //notify one of the threads to print itself
    synchronized (notifier){
      notifier.notify();
    }

    //wait for the threads to finish
    try {
      t1.join();
      t2.join();
    } catch (InterruptedException e) {
      e.printStackTrace();  //uh-oh
    }
    System.out.println("done");
  }
}
于 2013-02-03T00:29:45.620 に答える
0

スレッドの関連性によって異なります。それらが関連している場合は、この前の質問への回答の1つで提案されているような待機/通知の設定でうまくいきます。

より多くのパブリッシュ/サブスクライブ方法がある場合は、スレッド間で通信する簡単な方法としてGuavaのEventBusをお勧めします。

于 2013-02-03T00:00:16.360 に答える