Hier ist ein Weg, es zu tun, ohne ein Master-Gewinde Das wartet auf jedes Ergebnis. Stattdessen müssen sich die Worker-Threads ein Objekt teilen, das die Ergebnisse ordnet.
import java.util.*;
public class OrderThreads {
public static void main(String... args) {
Results results = new Results();
new Thread(new Task(0, "red", results)).start();
new Thread(new Task(1, "orange", results)).start();
new Thread(new Task(2, "yellow", results)).start();
new Thread(new Task(3, "green", results)).start();
new Thread(new Task(4, "blue", results)).start();
new Thread(new Task(5, "indigo", results)).start();
new Thread(new Task(6, "violet", results)).start();
}
}
class Results {
private List<String> results = new ArrayList<String>();
private int i = 0;
public synchronized void submit(int order, String result) {
while (results.size() <= order) results.add(null);
results.set(order, result);
while ((i < results.size()) && (results.get(i) != null)) {
System.out.println("result delivered: " + i + " " + results.get(i));
++i;
}
}
}
class Task implements Runnable {
private final int order;
private final String result;
private final Results results;
public Task(int order, String result, Results results) {
this.order = order;
this.result = result;
this.results = results;
}
public void run() {
try {
Thread.sleep(Math.abs(result.hashCode() % 1000)); // simulate a long-running computation
}
catch (InterruptedException e) {} // you'd want to think about what to do if interrupted
System.out.println("task finished: " + order + " " + result);
results.submit(order, result);
}
}
Was ist dann der Zweck der Verwendung von Threads? Verwenden Sie einen sequentiellen Code stattdessen – yassin
dies nur eine einfache Code zur Veranschaulichung war, ich tatsächlich einige Teile, die ich parallel ausführen will und dann, sobald die Ergebnisse generiert werden, möchte ich die Ergebnisse in bestimmten Reihenfolge fusionieren – keshav84
einen Thread in der Art und Weise beginnen oben dargestellt ist bei weitem nicht lesbar ist, versuchen, die runnable zu einer Referenzgröße zuweisen, das wird es –