【发布时间】:2011-01-11 19:58:39
【问题描述】:
例如,假设我有一个名为 RunnableA 的 Runnable,它可以做一些事情。我还有一个名为 RunnableB 的 Runnable,它可以做其他事情。有没有办法以某种方式将这两个 Runnable 组合起来,以便它们在同一个线程中运行?
问题的第二部分是,如果这是可能的,那么我可以指定它们运行的顺序吗?
编辑!:我想这样做的原因是因为我需要在 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();
}
抱歉,如果没有很好地解释,如果您需要澄清,请发布 cmets。
谢谢!
【问题讨论】:
-
如果您需要这些在同一个线程上按指定的顺序运行,这不完全是多线程问题。你可以从可运行文件中提取你的代码吗?
标签: java multithreading runnable green-threads