目录
1、乐观锁的代表是AtomicInteger,使用cas来保证原子性
一、悲观锁
1、悲观锁的代表synchronized和Lock锁
(1)核心思想:线程只要占有了锁,才能操作共享变量,每次只要一个线程占锁成功,获取锁失败的线程,都得停下来等待。
(2)线程从运行到阻塞,再从阻塞到唤醒,涉及线程上下文切换,如果频繁发生,影响性能。
(3)实际上,线程在获取syncronized和Lock锁之前,如果锁已经被占用,都会做好几次重复操作,减少阻塞的机会。
二、乐观锁
1、乐观锁的代表是AtomicInteger,使用cas来保证原子性
(1)核心思想: 无需加锁,每次只要一个线程能成功修改共享变量,其他失败的进程不需要停止,不断重试直至成功。
(2)由于线程一直运行,不需要阻塞,因此不涉及线程上下文切换
(3)它需要多核cpu支持,且线程数不应该超过cpu核数