在Clojure并发中,如果执行任务需要很长时间,我希望生成的线程杀死自己,这类似于Golang ctx withtimeout提供的功能。我该怎么办?
请记住,我对Java线程一无所知。
答案 0 :(得分:2)
您不能干净地杀死Java线程,因此人们通常编写运行时间很长的线程来偶尔检查标志,并仅在适当的情况下继续工作。
另一方面,线程的客户端可以停止等待答案。如果从future
开始线程,则可以在https://clojure.github.io/clojure/clojure.core-api.html#clojure.core/deref的deref
上使用超时参数,或通过future-done?
对其进行检查。
当发生大量异步事情时,Clojure的core.async库中更好的Go-like代数可以作为原始Java线程的替代品(https://clojure.github.io/core.async/)很有帮助。
答案 1 :(得分:0)
没关系,显然有一种叫做未来和希望的东西。