1、锁机制(lock)
使用 lock 实现线程同步有很多缺点:
- 产生竞争时,线程被阻塞等待,无法做到线程实时响应
- dead lock,死锁
- live lock
- 优先级翻转
- 使用不当,造成性能下降
2、CAS(无锁算法)
乐观锁
CAS(比较与交换,Compare and swap) 是一种有名的无锁算法。无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Synchronization)。实现非阻塞同步的方案称为“无锁编程算法”( Non-blocking algorithm)。
相对应的,独占锁是一种悲观锁,synchronized就是一种独占锁,它假设最坏的情况,并且只有在确保其它线程不会造成干扰的情况下执行,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。
3、Synchronized
悲观锁