这段代码在做什么

what is this piece of code doing

public int synchronizedBlockGet() {
    synchronized( this ) {
        return i;
    }
}

我在阅读一些文章时遇到了这段代码。什么是同步? a class ,或方法或接口?请解释。

它是一个关键字,一次只允许一个线程进入块。

它将通过获取此对象的锁来实现。

当您处理 线程 时,就会出现同步或一般同步。例如,假设您的程序中有 2 个线程。这两个线程都使用同一个对象。 (考虑一个场景,其中一个线程正在写入 ArrayList 而另一个线程正在从中读取)。在这些情况下,我们必须确保另一个线程在一个线程写入列表时不进行读取或写入。这是因为,写入列表将至少包含 3 个步骤

  1. 从内存读取
  2. 修改对象(列表)
  3. 写回内存。

为了保证这些线程不被拦截,不会造成不一致,我们使用了线程同步的概念。

有几种方法可以实现同步,包括同步方法和同步块。您提供的代码是一个同步块。

public int synchronizedBlockGet() {
    synchronized( this ) {
        return i;
    }
}

这里发生的事情是,一旦一个线程在 synchronizedBlockGet 方法中,它将 lock 整个对象(称为 正在获取对象的锁)上面方法所在的地方。 synchronized(this)表示当前线程会锁住整个对象。因此,在当前线程离开同步块并释放该对象之前,没有其他线程可以访问该对象。虽然你举的例子不是同步的必要情况,但后面发生的事情是一样的。