Java 如果在非同步块中使用wait和notify方法,会发生什么?它有用吗?
关于同步的两个问题Java 如果在非同步块中使用wait和notify方法,会发生什么?它有用吗?,java,synchronization,Java,Synchronization,关于同步的两个问题 如果在非同步块中使用wait和notify方法会发生什么?它有用吗 同步对象是否应与wait方法的对象相同?我可以这样做吗: synchronized (o) { try { this.wait(); } catch (InterruptedException e) { } } 如果当前线程在调用对象的wait()或notify()方法之前未能对对象进行同步,则会引发非法线程状态异常。所以,不,它没有用 是的,要重申上述内容,线程
synchronized (o) {
try {
this.wait();
} catch (InterruptedException e) {
}
}
wait()
或notify()
方法之前未能对对象进行同步
,则会引发非法线程状态异常。所以,不,它没有用
wait()
或notify()
的同一实例上进行同步。因此,只有当o==this
时,该示例才会起作用
wait()
和notify()
的好理由,因为java.util.concurrent
被引入,而synchronized
现在也没那么有用了。我向初学者(更容易使用)和高级程序员(更强大、更正确)推荐该软件包中的高级工具。1。
在方法调用所属的对象上同步的synchronized
块之外,不能调用wait()
或notify()/notifyAll()
。如果您尝试,您将得到一个非法监视器状态异常
2.
您需要在
wait()/notify()/notifyAll()
调用所属的同一对象上进行同步。例如,您的代码将抛出编写的IMSE。您将要调用synchronized(此){…
取而代之。你得到了你的测试程序。你自己测试它。你会很快得到答案。你试过运行代码或阅读javadoc吗?从这些显而易见的方法中你不明白什么?第1点:谁拥有一个未同步对象的监视器?没有人?@yryrp对,没有线程拥有mo直到一个人进入临界段。