clojure/core future

点我查看原文及更多示例

(ns $clojureDoc.core.future)
;; 使用方式:(future & body)
;; Takes a body of expressions and yields a future object that will
;; invoke the body in another thread, and will cache the result and
;; return it on all subsequent calls to deref/@. If the computation has
;; not yet finished, calls to deref/@ will block, unless the variant of
;; deref with timeout is used. See also - realized?.
;; 获取一个表达式,产生一个未来对象:在其他线程中调用这个表达式,然后缓存结果,直到后续调用到deref或@宏
;; 如果计算(computation)还没完成,调用defer或@宏将被阻塞,除非使用带有超时的deref

(def x (future (Thread/sleep 1000) (println "===done===") 100))
(println "+++++")
;; 输出x,由于另一个线程为x赋值,但是延迟1秒,导致此处x的值为nil
(println x)
;; 当前线程阻塞2秒,future线程已经缓存了结果
(Thread/sleep 2000)
(println "=====")
;; 调用deref或@宏,future会立即返回结果
;; 即使不阻塞2秒,@x输出也会等待future线程完成求解,可以试试将1秒改为5秒
;; 但(println "=====")和(println "===done===")的顺序不同了
(println @x)
;; 输出
;; +++++
;; #object[clojure.core$future_call$reify__8439 0x54e7df6a {:status :pending, :val nil}]
;; ===done===
;; =====
;; 100

;; 修改为5秒后的输出顺序
;; #object[clojure.core$future_call$reify__8439 0x54e7df6a {:status :pending, :val nil}]
;; =====
;; ===done===
;; 100

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangningboo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值