ThreadPoolExecutor not terminating
"이희승 (Trustin Lee)"
trustin at gmail.com
Mon Jul 20 23:09:24 EDT 2009
Hi Mike,
Do you see anything interesting in the full thread dump when it's stuck
there?
On 07/21/2009 10:41 AM, Mike McGrady wrote:
> The ThreadPoolExecutor from ExcutorUtil is shutting down but is not
> terminating, resulting in releaseExternalResources from
> NioClientSocketChannelFactory not returning.
>
> I know this functionality works. Of course it does!
>
> The shutdownNow is returning an empty list of task waiting to be executed.
>
> Any ideas? The repetition I am getting in a "debugged" ExecutorUtil is:
>
> i = 1
> Start: http://localhost:8080
> Channel bound: true
> RELEASE-1
> Channel future success : true
> Channel future done : true
> Channel future cancelled: false
> ----End (Milliseconds: 862)
> RELEASE-2: executors length: 2
> EXECUTORS: [Ljava.util.concurrent.Executor;@114025
> EXECUTOR: java.util.concurrent.ThreadPoolExecutor at 8a52b6
> EXECUTOR: java.util.concurrent.ThreadPoolExecutor at 3c550f
> RELEASE-3
> RELEASE-3
> RELEASE-4
> RELEASE-4B: es = java.util.concurrent.ThreadPoolExecutor at 8a52b6
> RELEASE-4C
> RELEASE-4C1: SHUTDOWN NOW: java.util.concurrent.ThreadPoolExecutor at 8a52b6
> LIST: []
> shutdown: true
> terminated: false
> RELEASE-4D
> ----------YES
> shutdown: true
> terminated: true
> RELEASE-4
> RELEASE-4B: es = java.util.concurrent.ThreadPoolExecutor at 3c550f
> RELEASE-4C
> RELEASE-4C1: SHUTDOWN NOW: java.util.concurrent.ThreadPoolExecutor at 3c550f
> LIST: []
> shutdown: true
> terminated: false
> RELEASE-4D
> ----------NO
>
> This is for the ExecutorUtil code:
>
>
>
> for (Executor e: executorsCopy) {
> System.out.println("RELEASE-4") ;
> if (!(e instanceof ExecutorService)) {
> System.out.println("RELEASE-4A") ;
> continue;
> }
>
> ExecutorService es = (ExecutorService) e;
> System.out.println("RELEASE-4B: es = " + es) ;
> for (;;) {
> System.out.println("RELEASE-4C") ;
> try {
> List waiting = es.shutdownNow();
> System.out.println("RELEASE-4C1: SHUTDOWN NOW: " + es + "
> LIST: " + waiting) ;
> System.out.println("shutdown: " + es.isShutdown()) ;
> System.out.println("terminated: " + es.isTerminated()) ;
>
> } catch (SecurityException ex) {
> // Running in a restricted environment - fall back.
> try {
> es.shutdown();
> System.out.println("RELEASE-4C2: SHUTDOWN: " + es) ;
> } catch (SecurityException ex2) {
> // Running in a more restricted environment.
> // Can't shut down this executor - skip to the next.
> System.out.println("+++++++++++++++SHOULDN'T?-0") ;
> break;
> } catch (NullPointerException ex2) {
> // Some JDK throws NPE here, but shouldn't.
> System.out.println("SHOULDN'T?-1") ;
> }
> } catch (NullPointerException ex) {
> // Some JDK throws NPE here, but shouldn't.
> System.out.println("SHOULDN'T?-2") ;
> }
> System.out.println("RELEASE-4D") ;
>
> try {
> if (es.awaitTermination(100, TimeUnit.MILLISECONDS)) {
> System.out.println("----------YES") ;
> System.out.println("shutdown: " + es.isShutdown()) ;
> System.out.println("terminated: " + es.isTerminated())
> ;
> break;
> } else {
> System.out.println("----------NO") ;
> }
> } catch (InterruptedException ex) {
> System.out.println("IGNORE?") ;
> // Ignore.
> }
> System.out.println("RELEASE-4E shutdown: " + es.isShutdown()) ;
> if (es.isShutdown()) {
> System.out.println("IS SHUTDOWN") ;
> }
> System.out.println("RELEASE-4E terminated: " +
> es.isTerminated()) ;
> //System.out.println("RELEASE-4E terminating: " +
> ((ThreadPoolExecutor)es).isTerminating() ;
> }
> }
> System.out.println("RELEASE END") ;
More information about the netty-users
mailing list