appels simultanés de singleton méthodes de la classe

J'ai une classe singleton:

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);
            }
    }
}

Et plusieurs Threads sont en appelant le travail() fonction:

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();
}
}

J'ai remarqué que les deux Threads s'exécutant en même temps, comme si les deux fonctions ont été instancié dans le même temps.

Je veux le dernier thread à exécuter à la place de le thread précédent, plutôt que simultanément. Est-il possible en java pour faire l'appel de la deuxième remplacer l'espace de la mémoire du premier appel?

Je ne suis pas sûr de ce que votre question est de savoir, mais votre getSingleton() méthode doit être synchronized
work() ne doit pas être statique, sinon l'exemple n'a pas de sens
J'ai essayé avec synchronisé, mais les deux fils sont toujours en cours d'exécution simultanément
retrait statique sur les deux fonctions() s'exécute en séquence, un à la fois. Apparemment, le deuxième appel est mis en attente après le premier appel. Comment peut le deuxième appel, il suffit d'exécuter à la place de la première?
synchronized ne pas arrêter de les deux threads s'exécutant en même temps: il ne sérialiser leur accès à la getSingleton() fonction. Dit autrement, cela signifie que vous pouvez être sûr que peu importe combien de threads sont actuellement dans l'exécution, un seul d'entre eux à la plupart seront d'exécution getSingleton() à n'importe quel point dans le temps.

OriginalL'auteur Luky | 2012-10-13