Array von threads?
So, ich habe ein Problem zu verstehen, wie zu vermeiden sequentielle Ausführung der threads. Ich bin versucht, erstellen Sie ein array von threads und führen Sie die start() und join () - Funktionen in separaten Schleifen. Hier ist ein code Beispiel, was ich jetzt habe:
private static int[] w;
static class wThreads implements Runnable {
private final int i;
public wThreads(int i) {
this.i = i;
}
//Set member values to 1
@Override
public void run() {
//doing specific stuff here
}
}
Und hier ist, wo die threads erstellt werden, in main:
int argSize = Integer.parseInt(args[0]);
w = new int[argSize];
//Initialize w
for (int i = 0; i < argSize; i++) {
wThreads wt = new wThreads(i);
for (int j = 0; j < argSize - 1; j++) {
Thread t = new Thread(wt);
t.start();
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Also scheinbar ist dies nicht ein Beispiel von threads parallel arbeiten. Sie warten darauf, sich gegenseitig fertig zu machen. Ich weiß, dass der join () - und start() aufruft, sollte in verschiedenen Schleifen, aber wie kann ich mich auf den thread in einer anderen Schleife als der es ursprünglich erstellt?
Muss ich ein array erstellen des threads in die Deklaration der Klasse? Sollen die Schleifen sein, die gab es auch, und außerhalb der main?
Bin ich sehr verwirrt und jede info würde geschätzt. Danke!
for
Schleife.Ja, sammeln Sie Sie in einem array. Oder verwenden Sie einen ExecutorService und awaitTermination().
InformationsquelleAutor Syrne | 2014-10-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht die Verknüpfung innerhalb der Schleife, wo Sie sind zu starten (Sie können aber, da Sie gefunden haben, es gibt keine Parallelität). Erstellen Sie ein array für die threads, starten Sie Sie in eine Schleife und dann erstellen Sie eine zweite Schleife, die die join-Aufruf. Ich glaube, Sie wollen nicht das innere für alle.
Ich vermute, Sie wollen, dies selbst zu tun, aber der normale Weg ist mit dem Anbieter, Thread-Pools und solchen, sehen Oracle Tutorials
InformationsquelleAutor Dylan
Müssen Sie ein array oder eine andere Sammlung. Es ist nicht notwendig, um es auf die Deklaration der Klasse level - es könnte sehr gut sein, lokal:
InformationsquelleAutor dasblinkenlight
Beim Aufruf
join()
in einem thread, sagen Sie Ihr Programm warten, bis der thread fertig ausgeführt wurde, dann zerstören den thread. Offensichtlich ist, dann wollen wir spin-up ein paar neue threads, laufen lassen, und kommen Sie später. Ein thread ist einfach nur ein Wert wie jeder andere, und Sie können speichern Sie in einer Variablen. Also, in diesem Fall erstellen wir ein neues array der Threads:Nun, wenn Sie beitreten wollen, die Fäden in einer anderen Funktion, müssen Sie eine Reihe von threads, die eine member-variable. Andernfalls können Sie es wie es ist.
Wenn Sie beitreten möchten Ihre threads, nur mit einer Schleife durch das array und call
join()
auf jedes Mitglied.Dieser schließt jeden thread in der Reihe. Die anderen threads werden (möglicherweise, abhängig vom scheduler) laufen immer noch parallel, während dies geschieht,, wenn Sie noch läuft die Zeit.
InformationsquelleAutor TheSuper