在Java7中实现并发性和并行性

在Java7中实现并发性和并行性,java,concurrency,parallel-processing,Java,Concurrency,Parallel Processing,作为我正在进行的一项研究的一部分,我正在探索使用Scala和Clojure等语言在JVM上实现并发性的所谓简单性。 通过简单性,我希望证明这些语言提供了比Java7更简单的并发结构 因此,我希望找到一些好的参考资料来解释Java并发模型的复杂性 除了向我指出谷歌的发展方向(我已经搜索了谷歌,但成功率有限),如果那些有知识的人能给我提供一些好的参考资料,让我在这个领域起步,我将不胜感激 谢谢Java不支持lambda表达式。创建内联回调(例如,完成异步调用)需要5行匿名类型的样板文件 这强烈阻止人

作为我正在进行的一项研究的一部分,我正在探索使用Scala和Clojure等语言在JVM上实现并发性的所谓简单性。 通过简单性,我希望证明这些语言提供了比Java7更简单的并发结构

因此,我希望找到一些好的参考资料来解释Java并发模型的复杂性

除了向我指出谷歌的发展方向(我已经搜索了谷歌,但成功率有限),如果那些有知识的人能给我提供一些好的参考资料,让我在这个领域起步,我将不胜感激


谢谢

Java不支持lambda表达式。创建内联回调(例如,完成异步调用)需要5行匿名类型的样板文件

这强烈阻止人们使用回调。这可能就是为什么Java 7仍然没有一个回调接口来接受一个值(与
Runnable
Callbable
相反),而C则有一个

因此,JDK并不真正支持异步操作。
异步操作的关键是能够启动长时间运行的请求,并在请求完成时让它运行回调,而不必在请求期间消耗线程。在Java中,您只能通过对
Future
进行单独的线程调用
get()
来实现这一点。这将使用标准API的应用程序的并发性限制为您可以正常支持的线程数

为了解决这个问题,Google的Guava framework for better Java代码引入了一个具有完成回调的函数


像Scala这样的语言通过支持lambda表达式(它)并添加它们自己的/类型来解决这个问题。

虽然更高级的语言更容易使用多核,但人们经常忘记的是为什么要使用多核,这是为了使程序更快,例如增加其吞吐量

当您考虑增加并发的选项时,需要测试这些选项是否确实以某种方式提高性能。(因为他们通常不会)

e、 STM(软件事务内存)使编写多线程应用程序更容易,而不必担心并发问题。问题是,对于简单的示例,不使用STM而只使用一个线程会更快

使用多线程会增加复杂性并使应用程序更加脆弱,因此必须有充分的理由这样做,否则您应该坚持使用最简单的解决方案

更多讨论

你读过这篇文章了吗?不过,我认为这与这个问题无关。@锑:等我讲完再说。