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