1

而我们要执行 2 Runnables :

executor.execute(new Runnable1());
executor.execute(new Runnable2());

不知道哪个Runnable会先开始执行?但我希望 Runnable1 首先启动执行。怎么做?

4

2 回答 2

9

为什么不创建一个可以运行的可运行文件Runnable1()Runnable2()?如果您不希望它们并行执行,请不要将它们分别提交给执行程序...

例如:

executor.execute(new Runnable() {
    @Override public void run() {
        new Runnable1().run();
        new Runnable2().run();
    }
});

当然,您应该考虑如果Runnable1抛出未经检查的异常会发生什么 - 您想Runnable2运行还是不运行?

编辑:根据您更新的要求,听起来您真的希望您的第二个可运行文件仅在您的第一个可运行文件达到特定点时启动(例如,已创建套接字并正在侦听连接)。您很可能想在该代码中放置某种钩子,以便您可以在到达那里时启动第二个可运行对象:

// Somewhat pseudo-code...
Server server = new Server();
server.onStartedListening(new Runnable() {
    @Override public void run() {
        executor.execute(new ClientConnection());
    }
});
executor.execute(server);
于 2013-01-29T09:46:47.190 回答
0

在 Runnable2() 代码中检查状态Runnable1.completed

在 Runnable1 中定义 astatic boolean completed = false;并在 Runnable1 中执行完成后使其为真

于 2013-01-29T09:50:58.393 回答