Last active
December 23, 2015 10:09
-
-
Save mrowe/6619558 to your computer and use it in GitHub Desktop.
This program never exits. Which part of Clojure's concurrency am I not understanding?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns test.core | |
(:gen-class)) | |
(def AGENT (agent "foo")) | |
(defn do-thing [a b] | |
(str a "=" b)) | |
(defn -main | |
"" | |
[& args] | |
(println "Hello, World!") | |
(send-off AGENT do-thing "bar") | |
(await-for 3000 AGENT) | |
(println @AGENT) | |
(println "Done!")) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ java -jar target/test-0.1.0-SNAPSHOT-standalone.jar | |
Hello, World! | |
foo=bar | |
Done! | |
[never returns] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.51-b01-457 mixed mode): | |
"DestroyJavaVM" prio=5 tid=7fdec2953800 nid=0x10db5d000 waiting on condition [00000000] | |
java.lang.Thread.State: RUNNABLE | |
"clojure-agent-send-pool-0" prio=5 tid=7fdec2953000 nid=0x1161dc000 waiting on condition [1161db000] | |
java.lang.Thread.State: WAITING (parking) | |
at sun.misc.Unsafe.park(Native Method) | |
- parking to wait for <7f38b1088> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) | |
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156) | |
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987) | |
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399) | |
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957) | |
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917) | |
at java.lang.Thread.run(Thread.java:680) | |
"Low Memory Detector" daemon prio=5 tid=7fdec401a800 nid=0x115357000 runnable [00000000] | |
java.lang.Thread.State: RUNNABLE | |
"C2 CompilerThread1" daemon prio=9 tid=7fdec4019800 nid=0x115254000 waiting on condition [00000000] | |
java.lang.Thread.State: RUNNABLE | |
"C2 CompilerThread0" daemon prio=9 tid=7fdec4019000 nid=0x115151000 waiting on condition [00000000] | |
java.lang.Thread.State: RUNNABLE | |
"Signal Dispatcher" daemon prio=9 tid=7fdec4018000 nid=0x11504e000 waiting on condition [00000000] | |
java.lang.Thread.State: RUNNABLE | |
"Surrogate Locker Thread (Concurrent GC)" daemon prio=5 tid=7fdec4017800 nid=0x114f4b000 waiting on condition [00000000] | |
java.lang.Thread.State: RUNNABLE | |
"Finalizer" daemon prio=8 tid=7fdec4006800 nid=0x114cbd000 in Object.wait() [114cbc000] | |
java.lang.Thread.State: WAITING (on object monitor) | |
at java.lang.Object.wait(Native Method) | |
- waiting on <7f42b02e8> (a java.lang.ref.ReferenceQueue$Lock) | |
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) | |
- locked <7f42b02e8> (a java.lang.ref.ReferenceQueue$Lock) | |
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) | |
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:171) | |
"Reference Handler" daemon prio=10 tid=7fdec4006000 nid=0x114bba000 in Object.wait() [114bb9000] | |
java.lang.Thread.State: WAITING (on object monitor) | |
at java.lang.Object.wait(Native Method) | |
- waiting on <7f42b4070> (a java.lang.ref.Reference$Lock) | |
at java.lang.Object.wait(Object.java:485) | |
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116) | |
- locked <7f42b4070> (a java.lang.ref.Reference$Lock) | |
"VM Thread" prio=9 tid=7fdec2843800 nid=0x114ab7000 runnable | |
"Gang worker#0 (Parallel GC Threads)" prio=9 tid=7fdec2000800 nid=0x110f60000 runnable | |
"Gang worker#1 (Parallel GC Threads)" prio=9 tid=7fdec2001000 nid=0x111063000 runnable | |
"Gang worker#2 (Parallel GC Threads)" prio=9 tid=7fdec4000800 nid=0x111166000 runnable | |
"Gang worker#3 (Parallel GC Threads)" prio=9 tid=7fdec4001000 nid=0x111269000 runnable | |
"Concurrent Mark-Sweep GC Thread" prio=9 tid=7fdec587c800 nid=0x11472f000 runnable | |
"VM Periodic Task Thread" prio=10 tid=7fdec402c000 nid=0x11545a000 waiting on condition | |
"Exception Catcher Thread" prio=10 tid=7fdec5801800 nid=0x10dd88000 runnable | |
JNI global references: 1734 | |
Heap | |
par new generation total 19136K, used 11596K [7f3000000, 7f44c0000, 7f44c0000) | |
eden space 17024K, 61% used [7f3000000, 7f3a291e8, 7f40a0000) | |
from space 2112K, 56% used [7f42b0000, 7f43da210, 7f44c0000) | |
to space 2112K, 0% used [7f40a0000, 7f40a0000, 7f42b0000) | |
concurrent mark-sweep generation total 63872K, used 0K [7f44c0000, 7f8320000, 7fae00000) | |
concurrent-mark-sweep perm gen total 21248K, used 12316K [7fae00000, 7fc2c0000, 800000000) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
rolls eyes