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