0

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

4

5 回答 5

0

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

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

于 2013-03-13T08:45:01.110 回答
0

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

只有一个线程可以在同一个监视器对象上同步的 Java 代码块内执行。

于 2013-03-13T08:47:00.170 回答
0

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

它可以是任何对象,尽管它通常是this.

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

于 2013-03-13T08:47:16.543 回答
0

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

于 2013-03-13T08:48:38.840 回答
0

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

于 2013-03-13T08:53:54.480 回答