Answers:
免责声明-我不是并发专家,但我的合著者是,我正在模仿他:-)
既然您已经阅读了道格·李(Doug Lea)和布莱恩·格茨(Brian Goetz)的书,那么您肯定涵盖了迄今为止最好的材料。
展望未来,Java 7中有了新的并发增强功能。最明显的是Fork / Join框架和新的异步NIO API。
Java 8将通过lambda / parallel集合进一步改进并发性。
认真考虑的另一件事是处理并发的替代方法。直言不讳,无论API改进了多少,Java的“锁定可变对象”方法总是容易出错。因此,我建议将Scala的参与者模型和Clojure的STM视为在保持与Java互操作性的同时处理并发问题的替代方法。
[警告->自我宣传]因此,我自然会推荐我们即将出版的书《The Well-Grounded Java Developer》,其中涵盖了我上面提到的所有内容:-)。[/ warning]
唯恐我忘记了,Groovy也有一个强烈推荐的Gpars库,尽管我个人没有使用过。
D编程语言为并行编程提供了两种范例,两者都有其用途,并且非常有趣。
std.concurrency提供消息传递而没有默认的内存共享。默认情况下,D中的所有全局变量和静态变量都是线程局部的,spawn
并且send
不允许发送包含可变指针间接寻址的消息。可以通过shared
关键字获得有限的共享,这需要类型系统进行额外的检查。在该语言的安全方言之外,您可以使用__gshared
关键字强制使用经典的C / Java风格的全局/共享变量,但就种族安全而言,所有赌注都没有涉及。在Andrei Alexandresu的书“ The D Programming Language”的一个免费章节中详细介绍了该模型。
std.parallelism安全性较差,但在某种程度上比std.concurrency更具灵活性,并且特别针对多核数据和任务并行性,以提高数据处理吞吐量,而不是一般情况下的并发。它具有并行的foreach循环,异步函数调用,并行约简等功能。它提供了使编写种族安全代码更容易的机制,但是这样做仍然需要一定的纪律。
在我最近关于该主题的文章中,可以找到有关D中两个主要的多线程范例的更详尽的讨论。
我强烈建议您去看看Clojure
并发方法非常新颖,在我看来,您在Java和大多数其他语言中所看到的已取得了重大进步。一些要点:
我建议观看此视频作为介绍
JVM上的编程并发性:Mastering Synchronization,STM和Actors讨论了Scala,Clojure,JRuby和Groovy中的并发编程。
您将对并发的不同方法有相当深刻的了解。
你的笑容在哪里?