3

我对 Java 中的等待通知机制有一个非常基本的问题。我知道我们可以通过使用它来同步两个不同的线程,但是,这些线程是否需要在同一个进程中运行?如果有两个线程在两个不同的进程中运行怎么办?等待通知方法仍然有效吗?

4

3 回答 3

2

等待通知不适用于在不同进程中运行的线程。

假设进程 A 分配的内存为0x1000- 0x2000,并且正在同步一个锁0x1200

进程 B 分配内存0x3000- 0x4000。它不可能访问0x1200,它可以...

那时您最好的同步方法是

  • 让进程通过本地 TCP/IP 套接字相互通信
  • 让进程读写锁定文件
于 2013-11-04T18:32:20.793 回答
1

当您启动 JVM 进程时,您创建的每个线程和您使用的内存都属于该 JVM 实例,而不是其他实例。

当您启动另一个 JVM 实例时,这两个实例不共享内存资源。因此,等待/通知(或任何其他对象)只能被属于该 JVM 实例的线程访问,而不能被其他进程访问。

于 2013-11-04T18:31:35.407 回答
1

不,不同的进程启动不同的 JVM,因此线程不会在那里通信。该机制适用于在同一个 JVM 上运行的线程。

wait()释放对象监视器并进入无限睡眠,而其他一些线程继续执行。 notify()唤醒调用wait()同一对象监视器的第一个线程。

于 2013-11-04T18:44:58.627 回答