我使用synchronized块时为什么需要传递这个?

时间:2013-03-13 08:42:16

标签: java synchronized

为什么我在使用synchronized块时需要传递“this”?同步的伙伴的目的是什么?

5 个答案:

答案 0 :(得分:0)

因为synchronized需要一个对象来锁定。 this和其他任何内容一样方便,或者您可以说Object lock = new Object()并在lock上同步。

或者,您可以将方法标记为synchronized

答案 1 :(得分:0)

Java synchronized块构造在括号中获取一个对象。 “this”是调用哪个方法的实例。由synchronized构造在括号中获取的对象称为监视器对象。据说代码在监视器对象上同步。同步实例方法使用它所属的对象作为监视对象。

在同一监视器对象上同步的Java代码块中只能执行一个线程。

答案 2 :(得分:0)

同步将在您指定的对象上完成,这意味着如果两个线程在同一对象上同步,则只有一个可以同时运行代码块。

它可以是任何对象,但通常是this

这使您可以在同一个类中的不同对象上进行同步,例如。

答案 3 :(得分:0)

syntex是synchronized(objectLock) { } 没有必要this, 我们需要传递一个对象,在多个线程尝试运行相同的同步块的情况下,我们希望为其提供独占访问权。 这样,如果在任何时间点,2个或更多线程试图访问synchronized块,则传递的对象(在这种情况下为'this')将具有块的独占访问权,除非块执行是完成后,没有其他人可以访问该块。

答案 4 :(得分:0)

Synchronize使用对象引用来锁定监视器对象。 要防止同时访问的每个资源都应该有自己的监视器对象。最简单的方法是使用this