public int synchronizedBlockGet() {
synchronized( this ) {
return i;
}
}
我在阅读一些文章时遇到过这段代码。什么是同步的?一个类,方法或接口?请解释一下。
答案 0 :(得分:1)
当您处理线程时,会发生同步或一般同步。例如,假设您的程序中有2个线程。这两个线程都使用相同的对象。 (考虑一个线程正在写入ArrayList而另一个正在从中读取的情况)。在那些情况下,我们必须确保在线程写入列表时其他线程不执行读取或写入操作。这是因为,对列表的写入至少包含3个步骤
为了确保这些线程不会拦截并且不会导致不一致,我们使用线程同步的概念。
有几种实现同步的方法,包括同步方法和同步块。您提供的代码是同步块。
public int synchronizedBlockGet() {
synchronized( this ) {
return i;
}
}
这里发生的事情是,一旦线程进入 synchronizedBlockGet 方法,它将锁定整个对象(称为获取锁对象)上面的方法是什么。
synchronized(this)
表示当前线程将锁定整个对象。因此,在当前线程离开同步块并释放对象之前,没有其他线程可以访问此对象。即使你给出的例子不是同步的必要条件,但背后发生的事情是相同的。
答案 1 :(得分:0)
它是一个关键字,它一次只允许单个线程进入该块。
它将通过获取此对象的锁定来实现此目的。