这段代码是做什么的

时间:2016-04-12 06:52:34

标签: java synchronized

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

我在阅读一些文章时遇到过这段代码。什么是同步的?一个类,方法或接口?请解释一下。

2 个答案:

答案 0 :(得分:1)

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

  1. 从内存中读取
  2. 修改对象(列表)
  3. 回写回记忆。
  4. 为了确保这些线程不会拦截并且不会导致不一致,我们使用线程同步的概念。

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

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

    这里发生的事情是,一旦线程进入 synchronizedBlockGet 方法,它将锁定整个对象(称为获取锁对象)上面的方法是什么。 synchronized(this)表示当前线程将锁定整个对象。因此,在当前线程离开同步块并释放对象之前,没有其他线程可以访问此对象。即使你给出的例子不是同步的必要条件,但背后发生的事情是相同的。

答案 1 :(得分:0)

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

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