我有一个关于Java中的wait-notify机制的非常基本的问题。我知道我们可以通过使用它来同步两个不同的线程,但是,这些线程是否需要在同一个进程中运行?如果有两个线程在两个不同的进程中运行怎么办?等待通知方法仍然有用吗?
答案 0 :(得分:2)
Wait-notify对于在不同进程中运行的线程不起作用。
假设进程A分配了0x1000
- 0x2000
的内存,并且正在锁定0x1200
上进行同步
进程B分配0x3000
- 0x4000
的内存。它无法访问0x1200
,可以吗......
此时您的最佳同步方法将是
答案 1 :(得分:1)
当您启动JVM进程时,您创建的每个线程和您使用的内存都属于该JVM实例,而不是其他任何内容。
启动另一个JVM实例时,这两个实例不共享内存资源。因此,只有属于该JVM实例的线程才能访问wait / notify(或任何其他对象),而不能访问其他进程。
答案 2 :(得分:1)
不,不同的进程启动不同的JVM,因此线程不在那里进行通信。该机制适用于在同一JVM上运行的线程。
wait()
释放对象监视器并进入无限睡眠状态,而其他一些线程继续执行。
notify()
唤醒在同一对象监视器上调用wait()
的第一个线程。