Instanz-Counter in Klasse realisieren

Syrill

Mitglied
Hi!
Ich möchte einen Instanz Counter erstellen, also eine Variable, die mitzählt, wie oft eine Klasse "verwendet" wird.
Kann ich einfach eine Variable x = 0 in der Klasse erstellen und im Konstruktor dann ++x einbauen? Bzw. wie kann ich dann verhindern, dass der Counter aussen vor bleibt, wenn der Standart-Konstruktor verwendet wird? Einfach den Standartkonstruktor mit "einbauen", also einen parameterlosen Konstruktor, der als einzige Anweisung ++x enthält?


Schöne Grüße,
Syrill


PS: Ich hoffe, ich habe mich halbwegs verständlich ausgedrückt! :)
 
Hi,

so wie du es geschrieben hast, kannst du es machen:
Java:
public class Test {
  private static int instance_count;
  
  public Test() {
    // synchronized für Thread-Sicherheit.
    synchronized (instance_count) {
      instance_count++;
    }
  }

   public Test(int anderere_parameter) {
    this();
  }
}

Gruß
BK
 
Vielen Dank! :)
Ich hatte es dann schon versucht umzusetzten, aber hatte nicht funktioniert, weil ich eine einfache Integer-Variable verwendet hatte, statt private static int instance_count;!

Schöne Grüße,
Syrill
 
Der Code ist zwar Thread-Sicher, allerdings durch das synchronized auch sehr langsam. Im übrigen sollte man lieber einen dedizierten Monitor verwenden, statt ein primitives Feld.

Mein Vorschlag wäre:

Java:
public class Test {
  private static final AtomicInteger INSTANCE_COUNTER = new AtomicInteger(0);

 {
     // Initialisierungs-Block
     INSTANCE_COUNTER.incrementAndGet();
  }
}

Damit muss man sich um die Konstruktoren keine Sorgen mehr machen und die Non-Blocking AtomicInteger ist Thread-Safe und schnell.

Die Frage ist eher: Wofür braucht man sowas? :)
 
Zurück