送信したタスクをシリアル順に実行するために、singleThreadExecutor があります。つまり、タスクを 1 つずつ実行し、並列実行しません。
私はこのようなものになるrunnableを持っています
MyRunnable implements Runnable {
@Override
public void run() {
try {
Thread.sleep(30000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
たとえば、MyRunnable の 3 つのインスタンスを前述のシングル スレッド エグゼキュータに送信すると、最初のタスクが実行されると予想されます。Thread.sleep には実行中のスレッドが TIMED_WAITING にあるためです (具体的には間違っている可能性があります)。州)。他の 2 つのタスクには、少なくとも最初のタスクが終了するまで、それらを実行するためのスレッドを割り当てないでください。
したがって、私の質問は、FutureTask API を介してこの状態を取得する方法、または何らかの方法でタスクを実行しているスレッドに到達する方法です (そのようなスレッドがない場合、タスクは実行または保留中を待機しています)。他の意味?
FutureTask は isCanceled() および isDone() メソッドのみを定義していますが、それらは Task の考えられるすべての実行ステータスを説明するには十分ではありません。