pau*_*doo 15 swing multithreading dispose clojure ownership
什么是惯用的Clojure方法来创建一个在后台循环的线程,对一些共享引用进行更新并管理它的生命周期?我发现自己正在使用future它,但感觉有点像黑客,因为我永远不会返回有意义的价值.例如:
(future (loop [] (do
(Thread/sleep 100)
(dosync (...))
(recur))))
Run Code Online (Sandbox Code Playgroud)
此外,future-cancel当不再需要后台处理时,我需要小心这一点.关于如何在Clojure/Swing应用程序中编排它的任何提示都会很好.例如JComponent,添加到我的UI中的虚拟对象,当窗口关闭时负责杀死线程可能是一个想法.
你不需要do循环; 这是隐含的.而且,虽然无条件循环重复没有任何问题,但您也可以使用(而真正的......).
future是一个很好的工具; 不要让你觉得你永远不会得到回报.如果你使用代理而不是未来,那真的会让你感到烦恼,不过没有价值观的代理人就是疯了.
但是,谁说你需要future-cancel?只需在将来的一个步骤中检查是否仍然需要它.然后,您的代码中没有其他部分需要跟踪期货并决定何时取消它们.所以像
(future (loop []
(Thread/sleep 100)
(when (dosync
(alter some-value some-function))
(recur)) ; quit if alter returns nil
))
Run Code Online (Sandbox Code Playgroud)
将是一个可行的方法.
| 归档时间: |
|
| 查看次数: |
4014 次 |
| 最近记录: |