Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果在非同步块中使用wait和notify方法,会发生什么?它有用吗?_Java_Synchronization - Fatal编程技术网

Java 如果在非同步块中使用wait和notify方法,会发生什么?它有用吗?

Java 如果在非同步块中使用wait和notify方法,会发生什么?它有用吗?,java,synchronization,Java,Synchronization,关于同步的两个问题 如果在非同步块中使用wait和notify方法会发生什么?它有用吗 同步对象是否应与wait方法的对象相同?我可以这样做吗: synchronized (o) { try { this.wait(); } catch (InterruptedException e) { } } 如果当前线程在调用对象的wait()或notify()方法之前未能对对象进行同步,则会引发非法线程状态异常。所以,不,它没有用 是的,要重申上述内容,线程

关于同步的两个问题

  • 如果在非同步块中使用wait和notify方法会发生什么?它有用吗
  • 同步对象是否应与wait方法的对象相同?我可以这样做吗:

    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直到一个人进入临界段。