这段代码在做什么
这个问题在这里已经有了答案:
当你正在处理线程时,同步或一般同步。 例如,假设您的程序中有2个线程。 这两个线程都使用同一个对象。 (考虑一个线程正在写入ArrayList而另一个线程正在读取的场景)。 在这些情况下,我们必须确保另一个线程在线程写入列表时不会执行读取或写入操作。 这是因为写入列表至少需要3个步骤
为了确保这些线程不会拦截并且不会造成不一致,我们使用线程同步的概念。
有几种实现同步的方法,包括同步方法和同步块。 您提供的代码是一个同步块。
public int synchronizedBlockGet() {
synchronized( this ) {
return i;
}
}
这里发生的是,一旦一个线程在synchronizedBlockGet方法内,它将锁定上述方法所在的整个对象(称为获取对象的锁 )。 synchronized(this)
意味着当前线程将锁定整个对象。 因此,没有其他线程可以访问此对象,直到当前线程离开同步块并释放该对象。 即使你给出的例子不是同步的必要情况,但后面发生的事情是一样的。
它是一个关键字,它将一次只允许单个线程进入该块。
它将通过获取此对象的锁定来实现此目的。
链接地址: http://www.djcxy.com/p/91857.html