有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从同步方法中调用方法

我面临一个奇怪的问题,这让我想知道在同步方法中到底发生了什么。假设有一种方法

synchronized public void example(){
     //...code
     int i=call(); //calling another method
     //...do something with i 
}

现在,在执行call()方法时,另一个对象可以进入这个同步的example()方法吗?因此,当call()返回时,可能会出现一些ConcurrentModificationException?如何避免出现问题


共 (3) 个答案

  1. # 1 楼答案

    不,不能。同步方法基本上与以下方法相同:

    public void example(){
      synchronized(this){
        //do stuff
      }
    }
    
  2. # 2 楼答案

    请注意,在本例中,如果call()不是私有的,或者是从类中的其他地方调用的,则其他人可以中断您认为是完全同步的过程

    synchronized void a(){
        println 'hello'
        b();
        println 'world'
    }
    
    void b(){
    
    }
    

    如果您期望“a所做的一切都由synchronized保护”,那么如果b有任何副作用,那么如果除synchronized void a之外的方法调用b,则该保证将丢失