JAVA并发应用程序的构件
一、原子类:java.util.concurrent.atomtic中有几个名字以Atomic打头的类。它们的语义基本上和volatile一样。
可以避免在共享数据上出现竞争危害的办法
如:AtomicLong和AtomicInteger
二、线程锁:java.util.concurrent.locks
块结构同步方式的几个缺点
锁只有一种类型
对被锁住对象的所有同步操作都是一样的作用
在同步代码块或方法开始时取得线程锁
在同步代码块或方法结束时释放线程锁
线程或者得到锁,或者阻塞
如果我们要重构对线程锁的支持
1、添加不同类型的锁,比如读取锁和写入锁
2、对锁的阻塞没有限制,即允许在一个方法中上锁,在另一个方法中解锁
3、如果线程得不到锁,比如锁由另一个线程持有,就允许该线程后退或继续执行,或者做其它事情,运用trylock
4、允许线程尝试取锁,并可以在超过等待时间后放弃
ReentrantLock:本质上跟用在同步块上的那种锁是一样的,但它要稍微灵活
ReentrantReadWriteLock:在需要读取很多线程而写入很小线程时,性能会好