`future` [https://github.com/clojure/clojure/blob/master/src/clj/clojure/core.clj#L6173] uses `binding-conveyor-fn` [https://github.com/clojure/clojure/blob/master/src/clj/clojure/core.clj#L1813] inside to keep the original thread binding frame while calling the function in a new thread.
Creating a vanilla Java thread is a JVM interop thing and as such Java semantics are preserved. Regards, BG On Fri, Aug 3, 2012 at 1:19 PM, Daniel Silén <nimbus...@gmail.com> wrote: > Hi! > > I am new to the language, and at the moment playing around with > concurrent-constructs as presented in a series on Clojure concurrency at > pluralsight.com (by Chraig Andera). > When playing with thread-local redefinitions of vars via the binding-macro, > I found an unexpected behavior: > A future is used to create a background-thread, and I would expect it to > behave the same way as when creating an explicit java thread, however it > doesn't. > If I rebind a var's value it receives the new value - but it shouldn't, > because it is in another thread, right?! > > Example: > (def ^:dynamic foo :fooval) > (def p (promise)) > (def p2 (promise)) > (binding [foo :newval] > (future (deliver p foo)) > (.start (Thread. #(deliver p2 foo))) > (println "in future: " @p) ; expected value of @p :fooval, actual :newval > (println "in java thread: " @p2) > (println "in binding: " foo)) > (println "outside binding: " foo) > > produces (in clojure 1.4.0): > user=> in future: :newval > in java thread: :fooval > in binding: :newval > outside binding: :fooval > nil > > I would expect the future-row to return the same as the java-thread-row, > :fooval. > > I would love to hear an expert-explanation... What did I do wrong? :) > > Kind regards > > Daniel Silén > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with your > first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en -- Baishampayan Ghose b.ghose at gmail.com -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en