第三遍阅读 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 Concurrency in practice
Java concurrency in Practice高清pdf,带目录标签,Java并发实战
Java Concurrency in Practice JAVA并发编程实践中文版(全)第二部分
java concurrency in practice
Java Concurrency in Practice源码
<<java并行编程>>英文版chm格式,英文名称<Java Concurrency in Practice>,一直想买这本书,但总是缺货,找到了电子版,分享给大家。 Java Concurrency in Practice By Brian Goetz, Tim Peierls, Joshua Bloch,...
正规PDF版本的 Java Concurrency In Practice。 经典著作,学习有益!
Concurrent_Programming+Java Concurrency in Practice+langspec
Java并发编程实践(Java Concurrency in Practice) (中英版)
Java.Concurrency.in.Practice.pdf
Many ofthe designations used bymanufacturersand ...appear in this book,and the publisher wasaware ofatrademark claim, the designations have been printed with initialcapitalletters or in all capitals.
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.pdf jcip-examples-src.jar jcip-annotations-src.jar 英文版是高清晰的,实战和实践都是同一帮人对英文版书的翻译,网传实战的翻译质量更好,实战是2012年出版的,应该是对前一版实践...
这本书很出名吧,大家都知道吧,我靠,20个字的描述咋这么累啊。
If you are a java developer, you should read this book. It will bring a lot benifit to you.
《JAVA并发编程实践》随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在...
介绍java多线程的超经典的书,不需要多介绍了。这是完整版。压缩包内包含两个版本的pdf,都是英文版。建议看英文版,因此中文版翻译得超烂。与此同时,压缩包内还有一个java多线程总结.ppt!