Java 如果使用对象引用调用notify,将通知哪个线程

Java 如果使用对象引用调用notify,将通知哪个线程,java,multithreading,Java,Multithreading,正如我们所知,wait()和notify()是在Object类中定义的,因为监视器将设置在Object上,而不是在该对象的特定线程上,所以我的问题是我们是否编写 MyObject mo=new MyObject(); Thread t1=new Thread(c); Thread t2=new Thread(c); try { t1.wait(); c.notify(); }catch(Exception e){} 如果我们像上面的线程t1或t2那样使用对象引用调用notify,那么哪个线程

正如我们所知,
wait()
notify()
是在
Object
类中定义的,因为监视器将设置在
Object
上,而不是在该对象的特定线程上,所以我的问题是我们是否编写

MyObject mo=new MyObject();
Thread t1=new Thread(c);
Thread t2=new Thread(c);
try {
t1.wait();

c.notify();
}catch(Exception e){}
如果我们像上面的线程t1或t2那样使用对象引用调用notify,那么哪个线程将被通知。

等待
通知使用相同的对象。如果
x
是任何
对象
,并且线程
t1
执行此操作:

x.wait();
然后,当另一个线程稍后在同一
对象上使用此选项时:

x.notify();
Object synchronizePoint;
然后将通知
t1
,因为它是等待
x
的线程。(这是假设没有其他线程对同一对象执行了
等待
。如果有多个线程在等待,系统将选择一个。)

您的错误在于尝试在
线程
对象上使用
等待

t1.wait();
这是合法的,因为您可以在任何
对象上
wait()
,而
线程是
对象。但这毫无意义,也不是正常的做事方式。更正常的做法是声明另一个对象,该对象用作两个线程用来同步的监视器。但另一个物体可以是任何东西。它可以是一个简单的
对象

x.notify();
Object synchronizePoint;

但通常是其他一些对象是所有线程正在处理的主要对象之一,这使得它成为一个方便的对象,可以用于同步,而无需声明新对象

无,因为线程尚未启动。不管怎么说,什么是
c
?这毫无意义。如果你查阅文档,你会找到你的答案,甚至不知道你为什么要问,或者你的代码到底要做什么。