java并发编程读书笔记

线程安全性

内置锁: synchronized
重入 :子类加锁函数调用父类同样函数可以调用,说明发生了重入,判断含有锁==1,可以往上叠加变为2

原子性

servlet中增加一个long类型都域,命中计数器都值会出现偏差,缺乏原子性

竞态条件

诠释:由于不恰当的执行时序而出现的不正确都结果是一种非常重要的情况.
两家星巴克 朋友之间互相寻找对方,当A朋友从1店起身找B时,B刚好从2店出来进入1店找A

活跃性和性能

servlet中命中计数器使用同步块代码来实现计数原子性
解决:应该尽量将不影响共享状态且执行时间较长都操作从代码同步块中分离出去,从而在这些操作的执行过程中,其他线程可以访问共享状态.

对象的共享

可见性

代码请点此处

过期数据

当线程读取某个变量时,这个变量可能是一个过期的值,除非每一次访问的变量都是同步的
同步化setter是不够的,调用get的线程仍然看得到过期值

非原子的64位操作

long double数据 64伟,jvm允许将64的读或写划分为32位的操作.你可能会得到一个值的高32位和另一个值的低32位.

锁和可见性

同一个代码块中加锁,可以保证线程间对代码块中的数据改动是可见的,如果没有同步,就没有这样的保证.

Volatile变量

访问volatile的操作不会加锁,也就不会发生引起执行线程的阻塞,故,volatile只是轻量级的同步机制.

欢迎大家关注:huazi's微信公众号