Скажите, например, что у меня есть Runnable под названием RunnableA, который что-то делает. У меня также есть Runnable под названием RunnableB, который делает что-то еще. Есть ли способ, каким образом я могу объединить эти две Runnables, чтобы они работали в одном потоке?Объединение двух объектов Runnable
Вторая часть вопроса, если это возможно, могу ли я указать порядок, в котором они будут работать?
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();
}
Извините, если это разве хорошо объяснил, комментировать, если вам нужно уточнение.
Спасибо!
Если вам нужно, чтобы они выполнялись в одном потоке в заданном порядке, это не совсем многопоточная проблема. Вы можете извлечь свой код из runnables? – Juliet