【发布时间】:2016-08-02 14:45:57
【问题描述】:
public int synchronizedBlockGet() {
synchronized( this ) {
return i;
}
}
我在阅读一些文章时遇到了这段代码。什么是同步的?一个类,或方法或接口?请解释一下。
【问题讨论】:
-
它正在同步实例,所以没有多个线程可以获取 i 的值
标签: java synchronized
public int synchronizedBlockGet() {
synchronized( this ) {
return i;
}
}
我在阅读一些文章时遇到了这段代码。什么是同步的?一个类,或方法或接口?请解释一下。
【问题讨论】:
标签: java synchronized
它是一个关键字,它一次只允许单个线程进入块。
它将通过获取该对象的锁定来实现。
【讨论】:
在处理线程时会出现同步或一般同步。例如,假设您的程序中有 2 个线程。这两个线程都使用同一个对象。 (考虑一个线程正在写入 ArrayList 而另一个线程正在读取它的场景)。在这些情况下,我们必须确保当一个线程正在写入列表时,另一个线程不会进行读取或写入。这是因为,写入列表至少需要 3 个步骤
为了保证这些线程不拦截,不会造成不一致,我们使用了线程同步的概念。
有几种实现同步的方法,包括同步方法和同步块。您提供的代码是一个同步块。
public int synchronizedBlockGet() {
synchronized( this ) {
return i;
}
}
这里发生的情况是,一旦一个线程在 synchronizedBlockGet 方法中,它将锁定整个对象(称为获取锁定对象)上述方法所在的位置。
synchronized(this) 表示当前线程将锁定整个对象。因此,在当前线程离开同步块并释放该对象之前,没有其他线程可以访问该对象。尽管您给出的示例不是同步的必要情况,但后面发生的事情是一样的。
【讨论】: