Dites par exemple que j'ai un Runnable appelé RunnableA qui fait quelque chose. J'ai aussi un Runnable appelé RunnableB qui fait autre chose. Existe-t-il un moyen de combiner ces deux Runnables afin qu'ils tournent dans le même thread?Combinaison de deux objets Runnable
La deuxième partie de la question est de savoir si cela est possible, puis-je spécifier l'ordre dans lequel ils vont s'exécuter?
EDIT !: La raison pour laquelle je voulais faire ceci était parce que j'ai besoin d'exécuter du code sur l'EDT mais une partie de l'autre code doit être exécuté sur un autre thread. S'il vous plaît jeter un oeil sur le code ci-dessous.
Quelque chose comme ça
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();
}
Désolé si ce isnt bien expliqué, poster des commentaires si vous avez besoin des éclaircissements.
Merci!
Si vous avez besoin que ces unités s'exécutent sur le même thread, dans un ordre spécifié, ce n'est pas exactement un problème multithread. Pouvez-vous extraire votre code des runnables à la place? – Juliet