Java并发编程从入门到精通 之 第三章 Thread安全

初识Java内存模型与多线程:
-1 认识 
CPU计算时,读取顺序是 寄存器->高速缓存区->内存,频繁读取的话可能会存在寄存器和告诉缓存区,并在适当时候写回内存。
-2 线程会共享java堆内存(主内存),操作变量时,会把变量从主内存你拷到工作内存操作,然后刷新到主内存。


线程不安全:
-1 原因:多个线程同时操作一个数据会造成相互修改问题。
-2 解决方法(三种);
-- 多实例(不用单利)、使用java.util.concurrent类库、锁(lock、synchronized。。。)


隐式锁,又称线程同步synchronized:
-1 修饰位置:
//1. 方法
public synchronized void synMethod() {}
//2. 代码块
synchronized(this) {}
-2 优化:降低加锁的资源
private byte[] lock = new byte[1];
public void method(){
    synchronized(lock) {}
}


显示锁Lock和ReentrantLock:
-1 加锁最高频率实现:
class X {
    private final ReentrantLock lock = new ReentrantLock();
    
        public void m(){
            lock.lock();  //加锁。。
            try{   } finally{
                lock.unlock();//解锁。。。
            }
        }
}



显示锁ReadWriteLock和ReentrantReadWriteLock:
-1 相比上面优势:可被多个读线程访问,或被一个写线程访问。
-2 使用场景:适合共享资源被大量读取,少量写操作。
-3 使用:
private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
//抽取读锁和写锁
private Lock readLock = rwl.readLock();
private Lock writeLock = rwl.writeLock();
//对所有访问者加读锁
public double getTotalBalance() {
    readLock.lock();
    try{。。。}
    finally{ readLock.unlock();  }
}
//对所有修改者加写锁
public double transfer() {
   writeLock .lock();
    try{。。。}
    finally{        writeLock.unlock();  }
}



显示锁StampedLock:
-1 锁的概念:
悲观锁:并发冲突下,屏蔽一切违反数据完整性操作。
读取悲观锁:读取前,判断数据是否被修改中。在·
乐观锁:假设不冲突,只在提交时检查数据是否违反数据完整性。
读取乐观锁:读取前不需判断一致性,只读自己就好。

-2 stampedLock介绍:
jdk1.8推出的api,可提高读取所吞吐量,乐观读取锁极大提高。
该锁易误用,建议使用ReentrantLock和ReentrantReadWriteLock即可。


Java关键字volatile修饰变量:
-1 说明:
volatile是易变不稳定的,不能对其采用缓存机制,因为它每次都从内存读取。但改完volatile后不一定会立刻将其写回你内存,所以做高并发不可靠。
-2 应用场景:
一线程修改,多线程读取,对内存可见性极高,原子性低。而加锁既能确保可见又能确保原子。


原子操作:atomic:
-1 说明:
是java.util.concurrent.atomic里,包含基本类AtomicInteger,AtomicLong,AtomicBoolean和 引用类型AtomicReference。。 和数组类型AtomicXxxArray。。和属性原子修改器,是线程安全的volatile(具备原子性)
-2 使用示例:
AtomicInteger ai = new AtomicInteger(0);
ai.get();   //获得
ai.getAndSet(5); //获得并修改
ai.getAndIncreament();  //获得并加1
ai.getAndDecreament();   //获得并减1
ai.getAndAdd(10);        //获得并加10           
-3 原理:利用CPU比较交换和非阻塞算法。













阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28666081/article/details/79967816
个人分类: JAVA
上一篇Java并发编程从入门到精通 之 第二章 认识Java里面的Thread
下一篇Java并发编程从入门到精通 之 第四章 线程安全的集合类
想对作者说点什么? 我来说一句

Java并发编程入门精通

2017年07月19日 31.53MB 下载

java并发编程入门精通

2018年03月26日 93.38MB 下载

java 并发编程入门精通.pdf

2018年03月14日 93.41MB 下载

Java并发编程---Thread

2016年10月30日 524KB 下载

java并发编程-从入门精通

2018年02月02日 93.24MB 下载

没有更多推荐了,返回首页

关闭
关闭