たとえば、何かを実行する RunnableA という Runnable があるとします。また、別のことを行う RunnableB という Runnable もあります。これら 2 つの Runnables を何らかの方法で組み合わせて、同じスレッドで実行する方法はありますか?
質問の 2 番目の部分は、これが可能である場合、それらが実行される順序を指定できますか?
EDIT!: 私がこれをやりたかった理由は、EDT でコードを実行する必要があるが、他のコードの一部は別のスレッドで実行する必要があるためです。以下のコードを見てください。
このようなもの
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();
}
これがうまく説明されていない場合は申し訳ありませんが、明確化が必要な場合はコメントを投稿してください。
ありがとう!