2 s を実行したい間Runnable
:
executor.execute(new Runnable1());
executor.execute(new Runnable2());
Runnable
どちらが最初に実行されるかは不明ですか? しかし、最初に実行のために Runnable1 を開始したいと思います。どうやってするか?
2 s を実行したい間Runnable
:
executor.execute(new Runnable1());
executor.execute(new Runnable2());
Runnable
どちらが最初に実行されるかは不明ですか? しかし、最初に実行のために Runnable1 を開始したいと思います。どうやってするか?
実行するだけのランナブルを作成してみません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);
Runnable2() コード内でのステータスを確認しますRunnable1.completed
Runnable1 で astatic boolean completed = false;
を定義し、Runnable1 で実行が終了したら true にします。