1 / 18
文档名称:

Java 和 Scala 并发性基础.doc

格式:doc   大小:226KB   页数:18页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Java 和 Scala 并发性基础.doc

上传人:liwenfei1314 2017/12/30 文件大小:226 KB

下载得到文件列表

Java 和 Scala 并发性基础.doc

相关文档

文档介绍

文档介绍:JVM 并发性: Java 和 Scala 并发性基础
处理器速度数十年来一直持续快速发展,并在世纪交替之际走到了终点。从那时起,处理器制造商更多地是通过增加核心来提高芯片性能,而不再通过增加时钟速率来提高芯片性能。多核系统现在成为了从手机到企业服务器等所有设备的标准,而这种趋势可能继续并有所加速。开发人员越来越需要在他们的应用程序代码中支持多个核心,这样才能满足性能需求。
在本系列文章中,您将了解一些针对 Java 和 Scala 语言的并发编程的新方法,包括 Java 如何将 Scala 和其他基于 JVM 的语言中已经探索出来的理念结合在一起。第一期文章将介绍一些背景,通过介绍 Java 7 和 Scala 的一些最新技术,帮助了解 JVM 上的并发编程的全景。您将了解如何使用 Java ExecutorService 和 ForkJoinPool 类来简化并发编程。还将了解一些将并发编程选项扩展到纯 Java 中的已有功能之外的基本 Scala 特性。在此过程中,您会看到不同的方法对并发编程性能有何影响。后续几期文章将会介绍 Java 8 中的并发性改进和一些扩展,包括用于执行可扩展的 Java 和 Scala 编程的 Akka 工具包。
Java 并发性支持
在 Java 平台诞生之初,并发性支持就是它的一个特性,线程和同步的实现为它提供了超越其他竞争语言的优势。Scala 基于 Java 并在 JVM 上运行,能够直接访问所有 Java 运行时(包括所有并发性支持)。所以在分析 Scala 特性之前,我首先会快速回顾一下 Java 语言已经提供的功能。
Java 线程基础
在 Java 编程过程中创建和使用线程非常容易。它们由  类表示,线程要执行的代码为  实例的形式。如果需要的话,可以在应用程序中创建大量线程,您甚至可以创建数千个线程。在有多个核心时,JVM 使用它们来并发执行多个线程;超出核心数量的线程会共享这些核心。
Java 5:并发性的转折点
Java 从一开始就包含对线程和同步的支持。但在线程间共享数据的最初规范不够完善,这带来了 Java 5 的 Java 语言更新中的重大变化(JSR-133)。Java Language Specification for Java 5 更正并规范化了 synchronized和 volatile 操作。该规范还规定不变的对象如何使用多线程。(基本上讲,只要在执行构造函数时不允许引用“转义”,不变的对象始终是线程安全的。)以前,线程间的交互通常需要使用阻塞的 
synchronized 操作。这些更改支持使用 volatile 在线程间执行非阻塞协调。因此,在 Java 5 中添加了新的并发集合类来支持非阻塞操作—这与早期仅支持阻塞的线程安全方法相比是一项重大改进。
线程操作的协调难以让人理解。只要从程序的角度让所有内容保持一致,Java 编译器和 JVM 就不会对您代码中的操作重新排序,这使得问题变得更加复杂。例如:如果两个相加操作使用了不同的变量,编译器或 JVM 可以安装与指定的顺序相反的顺序执行这些操作,只要程序不在两个操作都完成之前使用两个变量的总数。这种重新排序操作的灵活性有助于提高 Java 性能,但一致性只被允许应用在单个线程中。硬件也有可能带来线程问题。现代系统使用了多种缓存内存级别,一般来讲,不是系统中的所有核心都能同样看到这些缓存。当某个核心修改内存中的一个值时,其他核心可能不会立即看到此更改。
由于这些问题,在一个线程使用另一个线程修改的数据时,您必须显式地控制线程交互方式。Java 使用了特殊的操作来提供这种控制,在不同线程看到的数据视图中建立顺序。基本操作是,线程使用 synchronized 关键字来访问一个对象。当某个线程在一个对象上保持同步时,该线程将会获得此对象所独有的一个锁的独占访问。如果另一个线程已持有该锁,等待获取该锁的线程必须等待,或者被阻塞,直到该锁被释放。当该线程在一个synchronized 代码块内恢复执行时,Java 会保证该线程可以“看到了”以前持有同一个锁的其他线程写入的所有数据,但只是这些线程通过离开自己的 synchronized 锁来释放该锁之前写入的数据。这种保证既适用于编译器或 JVM 所执行的操作的重新排序,也适用于硬件内存缓存。一个 synchronized 块的内部是您代码中的一个稳定性孤岛,其中的线程可依次安全地执行、交互和共享信息。
在变量上对 volatile 关键字的使用,为线程间的安全交互提供了一种稍微较弱的形式。synchronized 关键字可确保在您获取该锁时可以看到其他线程的存储,而

最近更新

我国农民土地权益缺失的制度缺陷研究中期报告.. 2页

2024年幼儿工作计划汇总7篇 19页

2024年幼儿安全教育工作计划范文汇编6篇 17页

我国企业并购中的税收筹划问题研究的开题报告.. 2页

2024年幼儿园辞职报告简短范文 5页

我国上市公司中期财务报告自愿审计影响因素分.. 2页

意大利人口负增长问题研究的开题报告 2页

悬索桥轨索运梁系统设计参数与误差影响研究的.. 2页

2024年幼儿园毕业典礼开场白 16页

2024年事业单位招聘考试重庆市攀枝花市职业能.. 22页

2024年幼儿园春季开学工作自查报告(精选18篇.. 52页

2024年幼儿园新学期德育工作计划(11篇) 39页

微创固定系统倒置治疗股骨转子下骨折的研究的.. 2页

2024年幼儿园教师辞职报告集锦15篇 21页

快乐的元旦节优秀周记范文(30篇) 25页

2024年幼儿园教师教育教学方面总结(精选11篇.. 33页

体育教师党员自我批评发言稿 3页

2024年成都市化学中考模拟试题 7页

台锯出厂合格证检测报告 2页

劳务合同协议书范本(万能版)-免费下载 5页

江苏省房屋建筑施工文件归档移交清单 24页

维护校园安全工作六条措施 1页

《社会工作概论》全套教学课件 492页

饲料和饲料添加剂管理制度与质量管理体系报告.. 133页

关于开展“做文明有礼的的濮阳人”教育实践活.. 6页

关于正当防卫的社会调查报告(共10篇) 36页