gleichzeitige Aufrufe von singleton-Klassen-Methoden

Habe ich eine singleton-Klasse:

public class Singleton {
    private static Singleton istance = null;

    private Singleton() {}

    public synchronized static Singleton getSingleton() {
        if (istance == null)
            istance = new Singleton();
        return istance;
    }

    public void work(){
            for(int i=0; i<10000; i++){
                Log.d("-----------", ""+i);
            }
    }
}

Und mehrere Threads den Aufruf der work () - Funktion:

public class Main {

public static void main(String[] args) {

    new Thread (new Runnable(){
        public void run(){
            Singleton s = Singleton.getSingleton();
            s.work();}
    }).start();

    System.out.println("main thread");

    new Thread(new Runnable() { 
         public void run() {
             Singleton s = Singleton.getSingleton();
                s.work();
         }
    }).start();
}
}

Bemerkte ich, das zwei Threads gleichzeitig ausgeführt werden, als wenn zwei arbeiten Funktionen instanziiert wurden bei der gleichen Zeit.

Möchte ich den letzten thread ausgeführt werden, an die Stelle der früheren thread, dann eher gleichzeitig. Ist es möglich in java, um den zweiten Anruf überschreiben der Speicher-Platz der erste Anruf?

Ich bin mir nicht sicher, was deine Frage ist, aber Ihre getSingleton() Methode sollte synchronized
work() sollte nicht statisch sein, da sonst das Beispiel nicht sinnvoll
Ich habe versucht mit synchronisiert, aber die beiden threads sind immer noch die gleichzeitig ausgeführt
entfernen statischer die beiden arbeiten () - Funktionen läuft in der Reihenfolge, ein zu einer Zeit. Anscheinend ist der zweite Aufruf in die Warteschlange gestellt, nach dem ersten Aufruf. Wie können Sie den zweiten Anruf führen Sie einfach statt der ersten?
synchronized nicht aufhören können zwei threads gleichzeitig ausgeführt: es wird nur serialisiert den Zugriff auf die getSingleton() Funktion. Anders gesagt, es bedeutet, dass Sie können sicher sein, dass egal, wie viele threads sind derzeit in der Ausführung, nur einer von Ihnen am meisten wird die Ausführung getSingleton() an jedem beliebigen Punkt in der Zeit.

InformationsquelleAutor Luky | 2012-10-13

Schreibe einen Kommentar