1

2 s を実行したい間Runnable

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。実行しますか?

編集:更新された要件では、最初のランナブルが特定のポイントに到達したときにのみ2番目のランナブルを開始したいようです(たとえば、ソケットが作成され、接続をリッスンしています)そのコードにある種のフックを入れて、そこに着いたときに2番目のランナブルを開始できるようにしたい場合があります:

// 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 で実行が終了したら true にします。

于 2013-01-29T09:50:58.393 に答える