Muss diese Klasse ein Singleton sein, wenn der Sperrcodeblock in Java synchronisiert wird?
高洛峰
高洛峰 2017-06-28 09:22:12
0
2
940

Wenn eine Methode oder ein Codeblock gesperrt wird, kann höchstens ein Thread diesen Code gleichzeitig ausführen. Wenn zwei gleichzeitige Threads auf diesen gesperrten Synchronisationscodeblock im selben Objekt zugreifen, kann jeweils nur ein Thread ausgeführt werden. Ein anderer Thread muss warten, bis der aktuelle Thread die Ausführung dieses Codeblocks abgeschlossen hat, bevor er diesen Codeblock ausführen kann.

Dann stellt sich die Frage: Wenn zwei Threads auf unterschiedliche Instanzen dieses Objekts zugreifen, werden sie dann trotzdem blockiert?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

Antworte allen(2)
Ty80

synchronized的用法有以下三种

  1. 指定对象加锁。类似于synchronized (instance) {}。

  2. 直接作用于实例方法。相当于对当前实例加锁,进入同步方法前要获得当前实例的锁。

  3. 直接作用于静态方法。相当于对当前类加锁,进入同步方法前获得当前类的锁。

对于上面的1、2.必须是同一对象或者同一实例时才会使线程阻塞。

扔个三星炸死你

锁是加在对象实例上的。加在不同对象上的锁是不会相互影响的。两个线程访问两个不同对象,是不会相互阻塞的。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage