软件构造tips-关于jdk中一些线程安全的数据类型的实现
一·方法加锁
StringBuffer类
我们在java.lang文件夹下可以看到StringBuffer的源码:
我们可以非常清楚地看到,StringBuffer的方法添加了synchronized前缀,将方法添加了锁,这样每一个方法的调用都是原子化的,达到了线程安全的目的。但是这种类由于对方法进行了加锁,所以并行性并不乐观。
与此相似的常用类还有:HashTable类
Stack类
vector类
等等
二.分段锁
以ConcurrentHashMap类为例:
在这种机制下,每一把锁只是用于锁住一部分数据,那么当多线程访问Map里的不同