Alternative für synchronisierten Block in Java

8

Ich verwende folgenden Code für Garantie startTime Variable nur einmal gesetzt:

%Vor%

Ich garantiere durch diesen Code für eine Variable, die nur einmal für eine beliebige Anzahl von aufrufenden process -Methodenaufruf instanziiert wird.

Meine Frage ist:

Gibt es einen alternativen Ansatz für meinen Code, der präziser ist? (für Beispiel entfernen Sie if & amp; synchronized -Anweisungen)

    
Sam 25.07.2012, 12:15
quelle

6 Antworten

9

Basierend auf Ihren Kommentaren können Sie AtomicReference

verwenden %Vor%

oder AtomicLong

%Vor%

Ich würde

verwenden %Vor%

oder

%Vor%     
Peter Lawrey 25.07.2012, 12:18
quelle
11

Verwenden Sie AtomicReference :

%Vor%     
yegor256 25.07.2012 12:19
quelle
4

Ihr Code ist ein Beispiel für eine so genannte "Double Check Locking". Bitte lesen Sie diesen Artikel . Es erklärt, warum dieser Trick in Java nicht funktioniert, obwohl es sehr schlau ist.

    
AlexR 25.07.2012 12:19
quelle
2

Um zusammenzufassen, was andere Poster bereits erklärt haben:

%Vor%

Prägnant genug für Sie?

    
Alex D 25.07.2012 12:36
quelle
2

Ihr braucht also ein Singleton, das ist:

  1. Kurz, einfach zu implementieren / zu verstehen.
  2. Wird nur initialisiert, wenn doProcess aufgerufen wird.

Ich empfehle die folgende Implementierung mit einer geschachtelten Klasse:

%Vor%     
Tudor 25.07.2012 12:43
quelle
0

1 Was Sie verwendet haben, ist als double checked locking bekannt.

2. Es gibt noch zwei weitere Möglichkeiten, dies zu tun

%Vor%

3. Da Sie ein Beispiel mit dem Schlüsselwort % if und synchronized möchten, zeige ich Ihnen Initialize the static variable during declaration. way.

%Vor%     
Kumar Vivek Mitra 25.07.2012 12:21
quelle