Sagen Sie zum Beispiel, dass ich eine Runnable namens RunnableA, die etwas tut. Ich habe auch ein Runnable namens RunnableB, das etwas anderes tut. Gibt es eine Möglichkeit, diese beiden Runnables so zu kombinieren, dass sie im gleichen Thread laufen?Kombinieren von zwei runable Objekte
Der zweite Teil der Frage ist, wenn dies möglich ist, kann ich dann die Reihenfolge angeben, in der sie ausgeführt werden?
BEARBEITEN !: Der Grund, warum ich das tun wollte, war, weil ich Code auf dem EDT ausführen muss, aber ein Teil des anderen Codes muss auf einem anderen Thread ausgeführt werden. Bitte sehen Sie sich den folgenden Code an.
So etwas wie dieses
public final class CompoundRunnable implements Runnable
{
private final Iterable runnables;
public CompoundRunnable(Iterable runnables)
{
// From Guava. Easy enough to do by hand if necessary
this.runnables = Lists.newArrayList(runnables);
}
public CompoundRunnable(Runnable... runnables)
{
this(Arrays.asList(runnables));
}
@Override
public void run()
{
for (Runnable runnable : runnables)
{
runnable.run();
}
}
}
public void setStatusAndProgress(final String status,Runnable runnable)
{
Runnable startUpRunner = new Runnable()
{
public void run()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
setStatus(status);
selfReference.getProgressBar().setIndeterminate(true);
}
});
}
};
Runnable cleanUpRunner = new Runnable()
{
public void run()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
setStatus("");
getProgressBar().setIndeterminate(false);
}
});
}
};
Runnable theRunner = new CompoundRunnable(startUpRunner,runnable,cleanUpRunner);
new Thread(theRunner).start();
}
Sorry, wenn dies ist nicht gut erklärt, Kommentare zu schreiben, wenn Sie brauchen Klarheit.
Danke!
Wenn Sie diese auf dem gleichen Thread in einer angegebenen Reihenfolge ausführen müssen, ist es nicht genau ein Multithread-Problem. Können Sie stattdessen Ihren Code aus den Runnables extrahieren? – Juliet