java 并发核心编程

java 并发核心编程

ID:26476025

大小:47.68 KB

页数:13页

时间:2018-11-27

java 并发核心编程_第1页
java 并发核心编程_第2页
java 并发核心编程_第3页
java 并发核心编程_第4页
java 并发核心编程_第5页
资源描述:

《java 并发核心编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Java并发核心编程内容涉及:1、关于java并发2、概念3、保护共享数据4、并发集合类5线程6、线程协作及其他 1、关于java并发自从java创建以来就已经支持并发的理念,如线程和锁。这篇指南主要是为帮助java多线程开发人员理解并发的核心概念以及如何应用这些理念。本文的主题是关于具有java语言风格的Thread、synchronized、volatile,以及J2SE5中新增的概念,如锁(Lock)、原子性(Atomics)、并发集合类、线程协作摘要、Executors。开发者通过这些基础的接口可以构建高并发、线程安全的j

2、ava应用程序。 2、概念本部分描述的java并发概念在这篇DZoneRefard会被通篇使用。从JVM并发看CPU内存指令重排序(MemoryReordering):http://kenwublog.com/illustrate-memory-reordering-in-cpujava内存模型详解:http://kenwublog.com/explain-java-memory-model-in-detail概念描述JavaMemoryModelJava内存模型在JavaSE5(JSR133)中定义的JavaMemoryMode

3、l(JMM)是为了确保当编写并发代码的时候能够提供Java程序员一个可用的JVM实现。术语JMM的作用类似与一个观察同步读写字段的monitor。它按照“happens-beforeorder(先行发生排序)”的顺序—可以解释为什么一个线程可以获得其他线程的结果,这组成了一个属性同步的程序,使字段具有不变性,以及其他属性。monitorMonitorJava语言中,每个对象都拥有一个访问代码关键部分并防止其他对象访问这段代码的“monitor”(每个对象都拥有一个对代码关键部分提供访问互斥功能的“monitor”)。这段关键部分是

4、使用synchronized对方法或者代码标注实现的。同一时间在同一个monitor中,只允许一个线程运行代码的任意关键部分。当一个线程试图获取代码的关键部分时,如果这段代码的monitor被其他线程拥有,那么这个线程会无限期的等待这个monitor直到它被其他线程释放。除了访问互斥之外,monitor还可以通过wait和notify来实现协作。原子字段赋值Atomicfieldassignment除了doubles和langs之外的类型,给一个这些类型的字段赋值是一个原子操作。在JVM中,doubles和langs的更新是被实现

5、为2个独立的操作,因此理论上可能会有其他的线程得到一个部分更新的结果。为了保护共享的doubles和langs,可以使用volatile标记这个字段或者在synchronized修饰的代码块中操作字段。竞争状态Racecondition竞争发生在当不少于一个线程对一个共享的资源进行一系列的操作,如果这些线程的操作的顺序不同,会导致多种可能的结果。数据竞争Datarace数据竞争主要发生在多个线程访问一个共享的、non-final、non-volatile、没有合适的synchronization限制的字段。Java内存模型不会对这

6、种非同步的数据访问提供任何的保证。在不同的架构和机器中数据竞争会导致不可预测的行为。安全发布Safepublications在一个对象创建完成之前就发布它的引用时非常危险的。避免这种使用这种引用的一种方法就是在创建期间注册一个回调接口。另外一种不安全的情况就是在构造子中启动一个线程。在这2种情况中,非完全创建的对象对于其他线程来说都是可见的。不可变字段FinalFields不可变字段在对象创建之后必须明确设定一个值,否则编译器就会报出一个错误。一旦设定值后,不可变字段的值就不可以再次改变。将一个对象的引用设定为不可变字段并不能阻止

7、这个对象的改变。例如,ArrayList类型的不可变字段不能改变为其他ArrayList实例的引用,但是可以在这个list实例中添加或者删除对象。在创建结尾,对象会遇到”finalfieldfreeze”:如果对象被安全的发布后,即使在没有synchronization关键字修饰的情况下,也能保证所有的线程获取final字段在构建过程中设定的值。finalfieldfreezer不仅对final字段有用,而且作用于final对象中的可访问属性。不可变对象Immutableobjects在语法上final字段能够创建不需要synch

8、ronization修饰的、能够被共享读取的线程安全的不可变对象。实现ImmutableObject需要保证如下条件:·对象被安全的发布(在创建过程中this引用是无法避免的)·所有字段被声明为final·在创建之后,在对象字段能够被访问的范围中是

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。