java并发艺术学习笔记

1.CAS 操作 ,compareAndSet
http://blog.csdn.net/aesop_wubo/article/details/7537960

int expect = a;  
if(a.compareAndSet(expect,a+1)) {  
    doSomeThing1();  
} else {  
    doSomeThing2();  
}  

java.util.concurrent.ConcurrentLinkedQueue类全是采用的非阻塞算法,里面没有使用任何锁,全是基于CAS操作实现的。CAS操作可以说是JAVA并发框架的基础,整个框架的设计都是基于CAS操作的。
可以用CAS在无锁的情况下实现原子操作,但要明确应用场合,非常简单的操作且又不想引入锁可以考虑使用CAS操作,当想要非阻塞地完成某一操作也可以考虑CAS。不推荐在复杂操作中引入CAS,会使程序可读性变差,且难以测试,同时会出现ABA问题。

2.并发下,hashMap是非线程安全的,而HashTable效率太低,应该使用concurrentHashMap
hashmap会导致死循环,参考资料https://coolshell.cn/articles/9606.html

你可能感兴趣的:(java并发艺术学习笔记)