我需要从另一个java进程向一个java进程发送唤醒信号。我可以使用信号吗?我试图在互联网上找到一些东西,但无法得到。任何人都可以帮忙。
答案 0 :(得分:1)
假设你的意思是两个java线程,最简单的方法可能是使用javas wait / notify机制。您可以在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");
}
}
答案 1 :(得分:0)
取决于线程的相关性。如果它们是相关的,那么等待/通知设置就像this previous question的一个答案中建议的设置一样。
如果您有更多的发布/订阅方法,那么我建议使用Guava的EventBus作为线程之间通信的简单方法。
答案 2 :(得分:0)
我对同一个JVM部分中的两个进程感到困惑(两个类加载器?)。无论哪种方式,最简单的方法是通过共享本地套接字或文件进行通信。
您甚至可以查看共享内存映射。