这段代码在做啥[重复]

Posted

技术标签:

【中文标题】这段代码在做啥[重复]【英文标题】:what is this piece of code doing [duplicate]这段代码在做什么[重复] 【发布时间】:2016-08-02 14:45:57 【问题描述】:
public int synchronizedBlockGet() 
    synchronized( this ) 
        return i;
    

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

【问题讨论】:

它正在同步实例,所以没有多个线程可以获取 i 的值 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

    从内存中读取 修改对象(列表) 写回内存。

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

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

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

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

【讨论】:

我完全明白了。但是一个查询是,同步一个内置的方法或接口或类? 不是其中任何一个。它更像是一个内置的概念或语法,可以完成我上面解释的事情。 非常感谢,除了这个例子之外,还有哪些我们可以使用同步的情况? 我明白了。我读了另一个解释。谢谢

以上是关于这段代码在做啥[重复]的主要内容,如果未能解决你的问题,请参考以下文章

这段代码在做啥?

这段代码中的 lambda 函数在做啥? [复制]

请解释这段代码在做啥(someChar - 48)

你能告诉我这段代码在做啥吗?

这段代码在做啥。检查两个字符串的字谜

这行 Java 代码在做啥?