Frage

Es tut sich ein anderes Beispiel vage ... aber ich habe eine einzige Klasse, wo ich eine neue Thread-Instanz fange. Allerdings, wenn ich eine neue Thread-Instanz hinzufügen, unterbricht (zerstört?), Um die erste.

Aber wenn ich zwei Instanzen der Klasse laufe (getrennt, nachdem ich sie in JAR-Dateien verwandeln), wobei jede Instanz nur einen einzigen Thread eröffnet, sie beide gleichzeitig und fein ausgeführt werden.

Ich bin überzeugt, der Fehler ist der Weg Ich bin Multi-Threading zu implementieren.

Irgendwelche Vorschläge für Dinge zu suchen? Vielen Dank! Sorry für das vagee Beispiel.

War es hilfreich?

Lösung

Sie können nicht davon ausgehen, dass eine beliebige Klasse Thread-sicher ist.

Autoren einer Klasse sollte über die Thread-Sicherheit ihrer Klassen explizit sein, aber es ist sehr üblich, dass sie es nicht tun. Da die Umgebungen wie Servlets können eigen Mulit-threaded sein, dies ist ein echtes Problem sein kann.

Sie müssen die Klasse studieren und herauszufinden, welche, wenn überhaupt, sind Methoden Thread-sicher. Es ist möglich, dass die Klasse InstanceOfClassIDontControl statische Variablen hat, die von Multi-Thread-Zugriff verwirrt zu werden. Wenn Sie nicht nur die Klasse nicht kontrollieren, aber kann nicht einmal seine Quelle sehen, dann Sie gehen, um die Eigentümer Unterstützung benötigen.

Andere Tipps

Ok, hier ist ein Beispiel:

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

Im Beispiel I (natürlich) keine Kontrolle über die Klasse, deren Instanz erstellt wird und in dem Thread aufgerufen. Jeder Thread kann für Minuten. Aber immer, wenn ein gleichzeitiger Thread (in diesem Fall mit y.start ()) läuft ist, zerstören sie die Aktionen des Objekts in der run () Instanz von x.start () aufgerufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top