java:如何顺序执行一些Runnable?

时间:2013-01-29 09:45:45

标签: java multithreading

虽然我们想要执行2 Runnable s:

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

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

2 个答案:

答案 0 :(得分:9)

为什么不创建一个只运行Runnable1()然后Runnable2()的runnable?如果您不希望它们并行执行,请不要将它们分别提交给执行者......

例如:

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

当然,如果Runnable1引发未经检查的异常,你应该考虑你想要发生什么 - 你想要Runnable2运行吗?

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

// Somewhat pseudo-code...
Server server = new Server();
server.onStartedListening(new Runnable() {
    @Override public void run() {
        executor.execute(new ClientConnection());
    }
});
executor.execute(server);

答案 1 :(得分:0)

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

的状态

在Runnable1中定义一个static boolean completed = false;并在Runnable1中完成执行后将其设为true