Heim  >  Fragen und Antworten  >  Hauptteil

Muss diese Klasse ein Singleton sein, wenn der Sperrcodeblock in Java synchronisiert wird?

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?

高洛峰高洛峰2669 Tage vor908

Antworte allen(2)Ich werde antworten

  • PHP中文网

    PHP中文网2017-06-28 09:24:12

    synchronized的用法有以下三种

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

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

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

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

    Antwort
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-28 09:24:12

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

    Antwort
    0
  • StornierenAntwort