tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Bratkartoffel
  • 1 Beitrag von zeja
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
567
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Syrill Syrill ist offline Mitglied Bronze
    Registriert seit
    Nov 2010
    Beiträge
    39
    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!
     

  2. #2
    Avatar von Bratkartoffel
    Bratkartoffel Bratkartoffel ist offline gebratene Kartoffel
    tutorials.de Premium-User
    Registriert seit
    Jun 2007
    Ort
    Passau (Niederbayern)
    Beiträge
    1.394
    Hi,

    so wie du es geschrieben hast, kannst du es machen:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    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
    Syrill bedankt sich. 
    Über eine gute Bewertung freut sich jeder ;)
    Bitte erledigte Threads als "Erledigt" markieren.

    "Though a program be but three lines long, someday it will have to be maintained.''
    -- Geoffrey James, "The Tao of Programming"

  3. #3
    Syrill Syrill ist offline Mitglied Bronze
    Registriert seit
    Nov 2010
    Beiträge
    39
    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
     

  4. #4
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    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:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    
    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?
    Bratkartoffel bedankt sich. 

Ähnliche Themen

  1. Antworten: 7
    Letzter Beitrag: 24.05.10, 14:19
  2. Innerhalb einer Klasse eine Instanz einer anderen Klasse
    Von HackerNeo im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 17.11.09, 13:08
  3. Antworten: 3
    Letzter Beitrag: 18.12.07, 15:38
  4. counter realisieren
    Von Luda im Forum Visual Basic 6.0
    Antworten: 4
    Letzter Beitrag: 22.12.03, 21:30
  5. Antworten: 4
    Letzter Beitrag: 28.10.02, 00:47