Java与Clojure的良好并发示例

时间:2010-05-26 17:58:15

标签: java concurrency clojure

据说Clojure是一种使多线程编程更容易的语言。

来自Clojure.org网站:

  

Clojure简化了多线程   以多种方式编程。

现在我正在寻找在Java和Clojure中解决的非平凡问题,因此我可以比较/对比它们的简单性。任何人吗?

3 个答案:

答案 0 :(得分:13)

我建议也看看Christophe Grand的thread safe blocking queue;它不到20行,但包含了很多功能,在我看来,它证明了Clojure的一些并发特性,不变性,原子和懒惰序列的专家使用。

考虑Java替代java.util.concurrent.LinkedBlockingQueue is 842 lines的微妙(可称复杂)注释代码,并开始理解Clojure如何真正实现其并发承诺;显着提高抽象级别并提供正确的实现,代码大约减少10-20倍。

您还会注意到,在阅读Java代码时,很难看到森林中的树木......如果您获得了它,您可以通过查看它来确定其正确性吗?还要记住,这段代码是由Doug Lea(可以说是Java Concurrency最重要的专家)编写的,并且对于java具有高度可读性;我非常怀疑我能用Java快速编写可读的高性能代码,并确保其正确性。

将其与Clojure版本进行对比,一旦熟悉Clojure的基础知识,就可以很容易地分开并理解它是如何工作的...在20分钟内,我能够理解每一行的实现,并确保其正确性。而现在我对Clojure的成语和FP更为熟悉了,我猜这将使我接近5分钟。我也许可以在几小时或几分钟内在Clojure中编写这样的“正确”代码。

上述java类的Christophes clojure wrapper也具有指导意义,因为它与第一个版本共享相同的功能界面。

答案 1 :(得分:5)

由Tim Bray创办的

The Wide Finder Project有很多Clojure参赛作品 - 其中最引人注目的是Alex Osborne;他已完成a fantastic write-up - 以及Java,Scala和其他令人印象深刻的语言中的条目。

正在解决的问题非常实用,而且相当有趣,因为并行化挑战和蒂姆关于它的帖子(另见最近的Wide Finder 2系列)阅读非常愉快(并且具有良好的教育价值)。另外亚历克斯的文字真的很棒,即使你决定跳过其余部分,请阅读它。它使用了一些特定于Clojure的功能(如Atoms)以及从Java带来的东西,它可以很好地完成工作。实际上,只有它展示Clojure优秀的Java互操作方式才会很有趣。

总而言之,我认为这可能是最好的开始。

答案 2 :(得分:4)

请查看Rich Hickey's Ants example - 它显示了如何使用clojure的功能来构建并发程序