价格面议2020-09-23 14:36:14
1、乐观锁
乐观锁使用的场景是:读不会冲突、写会冲突,同时读的频率远大于写。
参考代码:
public object get(Object obj){
Object val =null;
if(val=map.get(key)==null){
//当map取值为null时再加锁判断
synchronized(map){
if(map.get(key)==null){
set some value;
}
}
}
return map.get(key);
}
乐观的认为在读的时候不会产生冲突为题,在写时添加锁。所以解决的应用场景是读远大于写时的场景。
2、String.intern()
乐观锁不能很好的解决大量的写冲突的问题,因为很多场景下,锁只是针对某个用户或者某个订单。然而由于网络问题,用户在创建session的请求和后续的请求可能会同时到达,并行线程会优先处理后面的请求,这就催生了行锁和数据库表锁的概念,显然行锁的并发能力比表锁高很多,使用String.intern()是这种方式的具体实现。