从另一个发出一个Java进程信号

时间:2013-02-02 23:47:25

标签: java

我需要从另一个java进程向一个java进程发送唤醒信号。我可以使用信号吗?我试图在互联网上找到一些东西,但无法得到。任何人都可以帮忙。

3 个答案:

答案 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部分中的两个进程感到困惑(两个类加载器?)。无论哪种方式,最简单的方法是通过共享本地套接字或文件进行通信。

您甚至可以查看共享内存映射。