锁机制存在问题
1.在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。
2.个线程持有锁会导致其它所有需要此锁的线程挂起
3.如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险
注意:独占锁是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。
volatile问题:volatile只能保证变量对各个线程的可见性,但不能保证原子性
CAS算法操作
CPU指令,在大多数处理器都采用CAS指令(我认为V的值应该为A,如果是,那么将V的值更新为B,否则不修改并告诉V的值实际为多少)。当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。