2010-05-26 23 views
17

Clojure据说是一种使多线程编程更容易的语言。Java与Clojure的良好并发性示例

Clojure.org网站:

Clojure的简化在几个方面多线程编程 。

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

+0

一个很好的博客解释功能:https://perkss.github。io /#/ clojure/ConcurrencyClojure#text-body – Matt 2018-02-18 19:33:14

回答

13

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

考虑一下微妙的(可以说是复杂的)注释代码的Java替代java.util.concurrent.LinkedBlockingQueue is 842 lines,并且开始理解Clojure如何真正实现它的并发承诺;大大提高了抽象级别,并以大约10-20倍的代码实现了正确的实现。

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

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

上述java类的Christophes clojure wrapper也具有启发性,因为它与第一个版本共享相同的功能接口。

4

请期待Rich Hickey's Ants example - 它展示了如何使用Clojure的特性来构建并发程序

+1

它还有一个Java版本吗?我正在寻找两种语言的例子,所以我可以比较/对比。 – 2010-05-26 18:26:38

+0

我记得,有人写了Java版本,但现在找不到它...... – 2010-05-27 07:11:02

5

The Wide Finder Project,由蒂姆·布雷开始,有一些Clojure的条目 - 最引人注目的是由亚历克斯·奥斯本;他完成了a fantastic write-up--以及Java,Scala和其他一些令人印象深刻的语言。

解决的问题是彻底实用而且作为并行处理挑战而非常有趣的,Tim的相关帖子(另请参阅最新的Wide Finder 2系列)阅读起来非常愉快(并具有良好的教育价值)。再加上Alex的文字真的很棒,即使你决定跳过其他文章,也请阅读。它使用了一些Clojure特有的功能(如Atoms)以及从Java带来的东西,它的工作很好,它的工作很好......事实上,它展示Clojure卓越的Java互操作性的方式会很有趣。总而言之,我认为这可能是最好的开始。