释怀的读书笔记之《Java并发编程实战》一

        这本书开篇解释了活跃性,性能,安全性在线程中的作用,也解释了锁的意义,以及RMI的作用是能使代码能够调用在jvm中运行的对象,老外的技术书写的真的好,开篇没有废话直接告诉你本书目的,怎么做,为什么这么做。

Java如何实现原子操作

        可以使用锁和循环CAS(compareAndSet这个原来就叫CAS)操作来实现,Java并发包中也有一些开发框架也用到了自旋CAS的方式来实现原子操作,虽然CAS解决了原子操作但是还有三大问题:1、ABA问题,2、循环时间长开销大,3、只能保证一个共享变量的原子操作。

        问题解决方法:1、从Java 1.5开始,JDK的Atomic包里提供了一个类AtomicStampedReference来解决ABA问题,2、时间长开销大,如果jvm可以支持处理器的pause指令这个指令有两个作用一个是他可以延迟流水线执行指令,第二个它可以避免在退出循环的时候因内存顺序冲突而引起CPU流水线被清空,从而提高CPU的执行效率。3、可以使用锁机制实现原子操作JVM实现锁的方式都用到了循环CAS(除了偏向锁),简单来说是一个想进入同步块的时候用循环CAS方式来取锁,退出同步块的时候用循环CAS来释放锁。

在开发中应该尽节能地使用现有的线程安全对象例如(AcomicLong、AcomicInteger还有很多不列举了)来管理类的状态,从而确保了代码的线程安全性,在一个无状态的类中添加一个状态的时候,如果这个状态完全让线程安全的对象来管理,那么这个线程还是安全的

加锁机制

内置锁(也叫监视锁)

支持原子性:也就是同步代码块(Synchronized Block)有两个部分一个是作为锁的对象引用,一个是让锁去保护的代码块(还有一个很重要的特性就是可见性)

synchronize(lock){

 

}

写在这段代码里面的对象就是被保护的

重入

这意思就是获取锁的操作的粒度是线程,而不是调用。重入可以进一步提升枷锁行为的封装性,可以简化代码开发,

子类改写了父类的synchronize方法然后调用父类 的方法,如果没有可重入的锁,那么代码死锁。

注:本文中有很多语句摘自《Java并发编程实战》,想要了解更多的自己去看书

(侵删)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值