Java同步认证

我对同步块/方法有些困惑,主要是因为我认为我看到了相互矛盾的信息。考虑以下代码:


public class Example {
    public int i;

    void increment() {
        synchronized(this) {
            i++;
        }
    }

    void decrement() {
        synchronized(this) {
            i--;
        }
    }

    synchronized void decrementWithModifer() {
        i--;
    }

    synchronized void incrementWithModifer() {
        i++;
    }

}

假设有线程1 ...他来看看第一个方法,增量。然后,他获得了Example的当前实例的“锁” ...线程2来尝试获取该锁,但是没有,所以他被挂起。线程1继续执行并完成递增操作,从而释放了锁定。然后,线程2立即获得了锁,线程1递减,但必须等待线程2取得锁,这首先正确吗?这意味着只有一个线程可以经历同步方法的循环,对吗?因此,这意味着线程1不能在线程2递减时递增,因为线程1要求的锁不是针对该方法,而是针对整个对象(尽管它在块/方法结束时确实释放了该锁。我假设相同) TLDR:是否获得对“ this”的锁定是否专门阻止另一个线程执行在“ this”下锁定的任何同步方法,而不仅仅是另一个线程当前正在执行的同步方法? :使用同步(this)进行递减操作,是否意味着线程2无法执行:使用同步(this)进行增量操作?

评论
  • iaut
    iaut 回复

    主要方法在哪里?您需要在main方法中调用要运行的方法,当您执行synced(this)时,这意味着在相同类的对象上运行的所有进程都将等待该方法的执行结束