5.11t.start()は非同期なので、すべてのスレッドがstartGate.await()を呼び出したあとに、startGate.countDown()が呼び出せる保証はない。actionを呼び出すスレッドは、最後にawaitしたスレッドとなっている。awaitの戻り値のインデックスは、awaitに入った逆順(0が最後)。シミュレーション例、3つ以上の惑星間の動きを計算する。2点間の引力しか算出できないため。while文は、キャンセル時に処理を継続することを意図したものFutureTaskでCancellationExceptionが発生するのは、FutureTaskのcancelを誰かが呼び出したあとでgetを呼び出した場合。このサンプルコードでは、cancelを呼び出せる人が存在しないので発生することはない。lifycycleExecutorServiceはどうやって取得するのか?→newXXThreadの戻り値が実はExecutorServiceを実装している。受け取る型をExecutorからExecutorServiceへ変更すればよい。システム時刻が変更(特に逆行)する場合問題が発生する。parallelism6.3.1-6.3.36.3.4-6.3.86.3.4パイプライン処理みたいなもの。