为什么我在使用synchronized块时需要传递“this”?同步的伙伴的目的是什么?
答案 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
。