Dear all,
I searched on Google but cannot find any similar topics. I am a Akka newbie
and used Akka to start some workers to process time consuming tasks.
I used system.AwaitTermination() and system.shutdown() to shutdown Akka.
My Akka used RoundRobinRouter and schedules 10 workers.
But, the JVM does not exit. Then I print all running threads.
Map<Thread, StackTraceElement[]> threads = Thread.getAllStackTraces();
for(Thread t:threads.keySet()){
System.out.println("--------------------------------------------------------");
System.out.println(t.getId()+":"+t.getName()+" is
daemon:"+t.isDaemon());
for(StackTraceElement stackTrace: threads.get(t)){
System.out.println(stackTrace.getFileName());
System.out.println(stackTrace.getClassName());
System.out.println(stackTrace.getMethodName());
System.out.println(stackTrace.isNativeMethod());
}
System.out.println("--------------------------------------------------------");
}
The following is the output.
Can anyone give me any hint whether is Akka prevent the JVM from exiting
and if it is, how to prevent that?
Thanks!
George
--------------------------------------------------------
2:Reference Handler is daemon:true
Object.java
java.lang.Object
wait
true
Object.java
java.lang.Object
wait
false
Reference.java
java.lang.ref.Reference$ReferenceHandler
run
false
--------------------------------------------------------
--------------------------------------------------------
27:CreationSystem-akka.actor.default-dispatcher-6 is daemon:false
Unsafe.java
sun.misc.Unsafe
park
true
ForkJoinPool.java
scala.concurrent.forkjoin.ForkJoinPool
idleAwaitWork
false
ForkJoinPool.java
scala.concurrent.forkjoin.ForkJoinPool
scan
false
ForkJoinPool.java
scala.concurrent.forkjoin.ForkJoinPool
runWorker
false
ForkJoinWorkerThread.java
scala.concurrent.forkjoin.ForkJoinWorkerThread
run
false
--------------------------------------------------------
--------------------------------------------------------
20:pool-3-thread-1 is daemon:false
Unsafe.java
sun.misc.Unsafe
park
true
LockSupport.java
java.util.concurrent.locks.LockSupport
park
false
AbstractQueuedSynchronizer.java
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject
await
false
ScheduledThreadPoolExecutor.java
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
take
false
ScheduledThreadPoolExecutor.java
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
take
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor
getTask
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor
runWorker
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor$Worker
run
false
Thread.java
java.lang.Thread
run
false
--------------------------------------------------------
--------------------------------------------------------
18:CreationSystem-akka.actor.default-dispatcher-4 is daemon:false
Unsafe.java
sun.misc.Unsafe
park
true
ForkJoinPool.java
scala.concurrent.forkjoin.ForkJoinPool
scan
false
ForkJoinPool.java
scala.concurrent.forkjoin.ForkJoinPool
runWorker
false
ForkJoinWorkerThread.java
scala.concurrent.forkjoin.ForkJoinWorkerThread
run
false
--------------------------------------------------------
--------------------------------------------------------
12:C3P0PooledConnectionPoolManager[identityToken->1hge24797149gw291ezhx58|6badc6a5]-HelperThread-#0
is daemon:true
Object.java
java.lang.Object
wait
true
ThreadPoolAsynchronousRunner.java
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread
run
false
--------------------------------------------------------
--------------------------------------------------------
22:pool-3-thread-3 is daemon:false
Unsafe.java
sun.misc.Unsafe
park
true
LockSupport.java
java.util.concurrent.locks.LockSupport
park
false
AbstractQueuedSynchronizer.java
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject
await
false
ScheduledThreadPoolExecutor.java
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
take
false
ScheduledThreadPoolExecutor.java
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
take
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor
getTask
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor
runWorker
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor$Worker
run
false
Thread.java
java.lang.Thread
run
false
--------------------------------------------------------
--------------------------------------------------------
28:Keep-Alive-Timer is daemon:true
Thread.java
java.lang.Thread
sleep
true
KeepAliveCache.java
sun.net.www.http.KeepAliveCache
run
false
Thread.java
java.lang.Thread
run
false
--------------------------------------------------------
--------------------------------------------------------
4:Signal Dispatcher is daemon:true
--------------------------------------------------------
--------------------------------------------------------
29:CreationSystem-akka.actor.default-dispatcher-7 is daemon:false
Unsafe.java
sun.misc.Unsafe
park
true
ForkJoinPool.java
scala.concurrent.forkjoin.ForkJoinPool
scan
false
ForkJoinPool.java
scala.concurrent.forkjoin.ForkJoinPool
runWorker
false
ForkJoinWorkerThread.java
scala.concurrent.forkjoin.ForkJoinWorkerThread
run
false
--------------------------------------------------------
--------------------------------------------------------
1:main is daemon:false
Thread.java
java.lang.Thread
dumpThreads
true
Thread.java
java.lang.Thread
getAllStackTraces
false
TestAkka.java
com.toucha.platform.common.akka.TestAkka
main
false
--------------------------------------------------------
--------------------------------------------------------
19:pool-2-thread-1 is daemon:false
Unsafe.java
sun.misc.Unsafe
park
true
LockSupport.java
java.util.concurrent.locks.LockSupport
parkNanos
false
AbstractQueuedSynchronizer.java
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject
awaitNanos
false
ScheduledThreadPoolExecutor.java
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
take
false
ScheduledThreadPoolExecutor.java
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
take
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor
getTask
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor
runWorker
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor$Worker
run
false
Thread.java
java.lang.Thread
run
false
--------------------------------------------------------
--------------------------------------------------------
24:pool-3-thread-5 is daemon:false
Unsafe.java
sun.misc.Unsafe
park
true
LockSupport.java
java.util.concurrent.locks.LockSupport
park
false
AbstractQueuedSynchronizer.java
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject
await
false
ScheduledThreadPoolExecutor.java
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
take
false
ScheduledThreadPoolExecutor.java
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
take
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor
getTask
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor
runWorker
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor$Worker
run
false
Thread.java
java.lang.Thread
run
false
--------------------------------------------------------
--------------------------------------------------------
16:CreationSystem-akka.actor.default-dispatcher-2 is daemon:false
Unsafe.java
sun.misc.Unsafe
park
true
ForkJoinPool.java
scala.concurrent.forkjoin.ForkJoinPool
scan
false
ForkJoinPool.java
scala.concurrent.forkjoin.ForkJoinPool
runWorker
false
ForkJoinWorkerThread.java
scala.concurrent.forkjoin.ForkJoinWorkerThread
run
false
--------------------------------------------------------
--------------------------------------------------------
21:pool-3-thread-2 is daemon:false
Unsafe.java
sun.misc.Unsafe
park
true
LockSupport.java
java.util.concurrent.locks.LockSupport
park
false
AbstractQueuedSynchronizer.java
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject
await
false
ScheduledThreadPoolExecutor.java
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
take
false
ScheduledThreadPoolExecutor.java
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
take
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor
getTask
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor
runWorker
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor$Worker
run
false
Thread.java
java.lang.Thread
run
false
--------------------------------------------------------
--------------------------------------------------------
11:C3P0PooledConnectionPoolManager[identityToken->1hge24797149gw291ezhx58|6badc6a5]-AdminTaskTimer
is daemon:true
Object.java
java.lang.Object
wait
true
Timer.java
java.util.TimerThread
mainLoop
false
Timer.java
java.util.TimerThread
run
false
--------------------------------------------------------
--------------------------------------------------------
3:Finalizer is daemon:true
Object.java
java.lang.Object
wait
true
ReferenceQueue.java
java.lang.ref.ReferenceQueue
remove
false
ReferenceQueue.java
java.lang.ref.ReferenceQueue
remove
false
Finalizer.java
java.lang.ref.Finalizer$FinalizerThread
run
false
--------------------------------------------------------
--------------------------------------------------------
14:C3P0PooledConnectionPoolManager[identityToken->1hge24797149gw291ezhx58|6badc6a5]-HelperThread-#2
is daemon:true
Object.java
java.lang.Object
wait
true
ThreadPoolAsynchronousRunner.java
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread
run
false
--------------------------------------------------------
--------------------------------------------------------
23:pool-3-thread-4 is daemon:false
Unsafe.java
sun.misc.Unsafe
park
true
LockSupport.java
java.util.concurrent.locks.LockSupport
parkNanos
false
AbstractQueuedSynchronizer.java
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject
awaitNanos
false
ScheduledThreadPoolExecutor.java
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
take
false
ScheduledThreadPoolExecutor.java
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
take
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor
getTask
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor
runWorker
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor$Worker
run
false
Thread.java
java.lang.Thread
run
false
--------------------------------------------------------
--------------------------------------------------------
13:C3P0PooledConnectionPoolManager[identityToken->1hge24797149gw291ezhx58|6badc6a5]-HelperThread-#1
is daemon:true
Object.java
java.lang.Object
wait
true
ThreadPoolAsynchronousRunner.java
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread
run
false
--------------------------------------------------------
--------------------------------------------------------
25:pool-3-thread-6 is daemon:false
Unsafe.java
sun.misc.Unsafe
park
true
LockSupport.java
java.util.concurrent.locks.LockSupport
parkNanos
false
AbstractQueuedSynchronizer.java
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject
awaitNanos
false
ScheduledThreadPoolExecutor.java
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
take
false
ScheduledThreadPoolExecutor.java
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
take
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor
getTask
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor
runWorker
false
ThreadPoolExecutor.java
java.util.concurrent.ThreadPoolExecutor$Worker
run
false
Thread.java
java.lang.Thread
run
false
--------------------------------------------------------
--------------------------------------------------------
26:CreationSystem-akka.actor.default-dispatcher-5 is daemon:false
Unsafe.java
sun.misc.Unsafe
compareAndSwapLong
true
ForkJoinPool.java
scala.concurrent.forkjoin.ForkJoinPool
tryTerminate
false
ForkJoinPool.java
scala.concurrent.forkjoin.ForkJoinPool
idleAwaitWork
false
ForkJoinPool.java
scala.concurrent.forkjoin.ForkJoinPool
scan
false
ForkJoinPool.java
scala.concurrent.forkjoin.ForkJoinPool
runWorker
false
ForkJoinWorkerThread.java
scala.concurrent.forkjoin.ForkJoinWorkerThread
run
false
--------------------------------------------------------
--------------------------------------------------------
5:Attach Listener is daemon:true
--------------------------------------------------------
--------------------------------------------------------
17:CreationSystem-akka.actor.default-dispatcher-3 is daemon:false
Unsafe.java
sun.misc.Unsafe
park
true
ForkJoinPool.java
scala.concurrent.forkjoin.ForkJoinPool
scan
false
ForkJoinPool.java
scala.concurrent.forkjoin.ForkJoinPool
runWorker
false
ForkJoinWorkerThread.java
scala.concurrent.forkjoin.ForkJoinWorkerThread
run
false
--------------------------------------------------------
--
>>>>>>>>>> Read the docs: http://akka.io/docs/
>>>>>>>>>> Check the FAQ:
>>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user
---
You received this message because you are subscribed to the Google Groups "Akka
User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.