Skip to content

Instantly share code, notes, and snippets.

@mrowe
Last active December 23, 2015 10:09
Show Gist options
  • Save mrowe/6619558 to your computer and use it in GitHub Desktop.
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?
(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!"))
$ java -jar target/test-0.1.0-SNAPSHOT-standalone.jar
Hello, World!
foo=bar
Done!
[never returns]
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)
@michaelneale
Copy link

 (shutdown-agents)

rolls eyes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment