次のテスト プログラムは、単純なバインド/受け入れを実行してから、チャネル グループをシャットダウンします。
プログラムが結果の ShutdownChannelGroupException を出力することを期待しますが、代わりに、完了ハンドラーを呼び出すことはなく、スレッド プールで例外をスローします。
誰かが何が起こっているのかを明らかにすることができますか? shutdownNow() には次の動作があると彼らが言うとき、私はドキュメントを誤解していますか?
コールバックがまだ「アクティブ」になっていないため、破棄されるだけですか?
public static void main(String[] args) throws java.io.IOException, InterruptedException {
ExecutorService service = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
AsynchronousChannelGroup group = AsynchronousChannelGroup.withThreadPool(service);
AsynchronousServerSocketChannel acceptor = AsynchronousServerSocketChannel.open(group);
acceptor.bind(new InetSocketAddress(50000));
acceptor.accept(null, new CompletionHandler<AsynchronousSocketChannel, Object>() {
@Override
public void completed(AsynchronousSocketChannel result, Object attachment) {
}
@Override
public void failed(Throwable exc, Object attachment) {
System.out.println("failed: " + exc.getMessage());
}
});
System.out.println("Shutting down");
group.shutdownNow();
System.out.println("Awaiting termination");
group.awaitTermination(60, TimeUnit.SECONDS);
System.out.println("Sleeping");
Thread.sleep(1000);
}