关于java:这段代码在做什么

what is this piece of code doing

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
public int synchronizedBlockGet() {
    synchronized( this ) {
        return i;
    }
}

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


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

  • 从内存读取
  • 修改对象(列表)
  • 写回内存。
  • 为了确保这些线程不会被截获并且不会导致不一致,我们使用了线程同步的概念。

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

    1
    2
    3
    4
    5
    public int synchronizedBlockGet() {
        synchronized( this ) {
            return i;
        }
    }

    这里发生的是,一旦一个线程在synchronizedblockget方法中,它将锁定上述方法所在的整个对象(称为获取对象的锁)。synchronized(this)表示当前线程将锁定整个对象。因此,在当前线程离开同步块并释放对象之前,没有其他线程可以访问此对象。尽管您给出的示例不是同步的必要情况,但后面发生的事情是相同的。


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

    它将通过获取此对象上的锁来实现这一点。