java.util.concurrent.Callableインスタンスが別スレッドで実行された際にスレッドが終了するタイミング
public class CallableSample implements Callable<Boolean> { public Boolean call() throws Exception { return Boolean.TRUE; } public static void main(String[] args) { ExecutorService ex = Executors.newSingleThreadExecutor(); Future<Boolean> future = ex.submit(new CallableSample()); Boolean result = null; try { result = future.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } System.out.println(result); ex.shutdown(); System.out.println("処理終了"); } }
上記のようなコードがあったとき、
Future<Boolean> future = ex.submit(new CallableSample());
このタイミングで子スレッドが作られるのですが、スレッドの状態はRunningのままになります。
そして、
ex.shutdown();
このタイミングで子スレッドが消滅しますが、子スレッドの実行が完了するまで待機します。
つまり終了するまでちゃんと待つ、ということになりますが、
ex.shutdownNow();
こちらを実行すると、問答無用で子スレッドを停止させる動きとなります。