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