Question

Désolé pour un autre exemple vague ... mais j'ai une seule classe où je commence une nouvelle instance de fil. Cependant, si j'ajoute une nouvelle instance de fil, il interrompt (Détruit?) Le premier.

Mais, si je lance deux instances de la classe (séparément, après que je les transforme en fichiers jar) où chaque instance ouvre seulement un seul fil, ils ont tous deux exécuter simultanément et bien.

Je suis convaincu que l'erreur est la façon dont je suis la mise en œuvre multi-threading.

Toutes les suggestions pour les choses à rechercher? Merci! Désolé pour l'exemple vague.

Était-ce utile?

La solution

Vous ne pouvez pas supposer qu'une classe arbitraire est thread-safe.

Les auteurs d'une classe devraient être explicite sur le fil de sécurité de leurs classes, mais il est très fréquent qu'ils ne le font pas. Étant donné que les environnements tels que les servlets peuvent être intrinsèquement mulit-thread cela peut être un vrai problème.

Vous devez étudier la classe et découvrir, le cas échéant, les méthodes sont thread-safe. Il est possible que la InstanceOfClassIDontControl classe a des variables statiques qui se confondre par l'accès multithread. Si vous non seulement ne contrôle pas la classe, mais ne peut même pas voir sa source, alors vous allez avoir besoin du soutien des propriétaires.

Autres conseils

Ok, voici un exemple:

public class driver {

    public static void main(String args[])
    {
        Thread x;
        Thread y;

        x = new Thread(new pow());
        y = new Thread(new pow());

        x.start();
        y.start();  
    }
}

public class pow extends Thread {

    public void run() {
        InstanceOfClassIDontControl a = new InstanceOfClassIDontControl();
                a.doVariousProcesses();
    }
}

Dans l'exemple, je (évidemment) ne contrôle pas la classe dont instance est créée et appelée dans le fil. Chaque fil peut fonctionner pendant quelques minutes. Mais chaque fois qu'un thread concurrent est couru (dans ce cas, avec y.start ()), il détruit les actions de l'objet appelé à l'instance run () de x.start ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top