代码之家  ›  专栏  ›  技术社区  ›  Michiel Borkent

Java与Clojure并发性的好例子

  •  17
  • Michiel Borkent  · 技术社区  · 16 年前

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

    从 Clojure.org

    Clojure简化了多线程

    现在,我正在寻找用Java和Clojure解决的一个非常重要的问题,以便比较它们的简单性。有人吗?

    3 回复  |  直到 16 年前
        1
  •  13
  •   Rick Moynihan    16 年前

    我建议你也去看看克里斯托夫·格兰德的 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中编写这样的“正确”代码。

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

        2
  •  5
  •   Michał Marczyk    16 年前

    The Wide Finder Project 由蒂姆·布雷(Tim Bray)创办,有许多Clojure作品——其中最著名的是亚历克斯·奥斯本(Alex Osborne);他完了 a fantastic write-up

    Wide Finder 2 系列)是相当有趣的阅读(并携带了良好的教育价值)。加上亚历克斯的文字是真的很好,请阅读它,即使你决定跳过其余的。它使用了一些Clojure特有的特性(比如Atoms)以及从Java带来的东西,如果它做得很好的话&快。。。事实上,它展示Clojure优秀的Java互操作的方式会很有趣。

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

    推荐文章