第三遍阅读 Java Concurrency in Practice时,终于意识到要写一些读书笔记。所谓温故而知新,那就从现在开始!
Chapter 2: 线程安全
线程安全性的定义:一个类在被多个线程访问时,可以持续进行正确的行为,这里的正确性指的是该类和它的规约保持一致。良好的规约定义了用于强制对象状态的不变约束以及描述操作影响的后验条件。
无论何时,只要有多于一个的线程访问给定的状态变量,而且其中某个线程会写入该变量,此时必须使用同步来协调线程对该变量的访问。Java中首要的同步机制是Synchronized关键字,它提供了独占锁,除此之外同步还包括volatile变量,显式锁和原子变量的运用。
在没有正确同步的情况下,如果多个线程访问了同一个变量,你的程序就存在隐患,有3种方法来修复它:
1.不要跨线程共享变量;
2.使状态变量变为不可变,状态变量指的是实例变量或者静态字段,一个无状态对象永远是线程安全的;
3.在访问状态变量时候使用同步。
原子性:
在管理对象的状态时,用AtomicLong这样已有的线程安全安全对象管理类的很合适。和非线程安全对象比较,判断一个线程安全对象的可能状态和状态转换要容易得多,这简化了维护和验证线程安全性的工作。
Synchronized代码块:
本次不介绍Synchronized机制的另一个重要方面:可见性。
Synchronized是Java提供的强制原子性的内置锁机制,一个Synchronized块有两个部分:锁对象的引用和这个锁保护的代码块。对于Synchronized方法,是跨越了整个方法体的Synchronized块的简述,与Synchronized代码块不同的是,Synchronized方法的锁就是该方法所在的对象自身,而静态Synchronized方法则从Class对象上获取锁。
每个Java对象都可以隐式的扮演用于同步的锁的角色,这些内置的锁被称为内部锁(intrinsic loaks)或者监视器锁(monitor locks)。执行线程进入Synchronized块之前会自动获得锁,而无论通过正常控制流退出还是从块中抛出异常退出,线程都在放弃对Synchronized块的控制之前自动释放锁。获得内部锁的唯一途径是:进入这个内部锁保护的同步块或者方法。
内部锁在Java中扮演了互斥锁的角色,意味着至多只有一个线程可以拥有锁。但内部锁是可重入的(Reentrancy),线程请求获得自己已经占有的锁时会成功,重入意味着所有请求是基于没线程的,而不是每调用的。它的实现是通过为每个锁关联一个请求计数(Acquisition count)和一个占有它的线程。当计数为0时,认为锁是未被占有的。JVM记录锁的占有者,如果同一线程再次请求这个锁,计数将增加;每次占用线程退出同步块,计数器将递减,直到计数器到达0时锁被释放。重入方便了锁行为的封装,简化了面向对象并发代码的开发。例如,如果子类Override了父类的synchronized方法,并调用父类中的方法,如果没有可重入的锁则会发生死锁。
分享到:
相关推荐
Java Concurrency in Practice 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者...
<<java并行编程>>英文版chm格式,英文名称<Java Concurrency in Practice>,一直想买这本书,但总是缺货,找到了电子版,分享给大家。 Java Concurrency in Practice By Brian Goetz, Tim Peierls, Joshua Bloch,...
1. **线程基础**:首先,书中会介绍线程的基本概念,包括线程的创建、启动、同步和停止。Java提供了`Thread`类和`Runnable`接口来实现线程,同时讲解了`start()`与`run()`方法的区别。 2. **并发模型**:Java并发...
Using the concurrency building blocks in java.util.concurrent Performance optimization dos and don'ts Testing concurrent programs Advanced topics such as atomic variables, nonblocking algorithms, ...
Java Concurrency in practice
Java Concurrency in Practice JAVA并发编程实践中文版(全)第二部分
java concurrency in practice 经典的多线程编程书籍,英文版
《Java Concurrency in Practice》是Java并发编程领域的一本经典著作,由Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowles和Doug Lea等专家共同编写。这本书深入探讨了Java平台上的多线程和并发编程,旨在...
本笔记将深入探讨《Java Concurrency In Practice》这本书中的核心概念,结合Guava库的实际使用案例,帮助读者理解并掌握Java并发编程的精髓。 首先,我们来了解Java并发的基础知识。Java提供了丰富的并发工具类,...
首先,"Java Concurrency in Practice"是Java并发编程的经典之作,由Brian Goetz、Tim Peierls、Joshua Bloch、David Holmes和Doug Lea合著。这本书提供了一套实用的指导原则、设计模式和最佳实践,帮助Java开发者...
《Java Concurrency In Practice》是一本关于Java并发编程的经典著作,由Brian Göetz、Tim Peierls、Joshua Bloch、Joseph Bowbeer、David Holmes和Doug Lea共同编写。本书深入探讨了Java平台上的多线程编程技巧,...
java_concurrency_in_practice.pdf jcip-examples-src.jar jcip-annotations-src.jar 英文版是高清晰的,实战和实践都是同一帮人对英文版书的翻译,网传实战的翻译质量更好,实战是2012年出版的,应该是对前一版实践...
这本书很出名吧,大家都知道吧,我靠,20个字的描述咋这么累啊。
- **书名**:《Java并发实践》(Java Concurrency in Practice) - **作者**:Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea - **出版社**:Addison Wesley Professional - **...
If you are a java developer, you should read this book. It will bring a lot benifit to you.
《JAVA并发编程实践》随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在...