- java中有哪些锁?
- 乐观锁/悲观锁。
- 乐观锁:在java并发包下atomic 下的实现类都是基于cas的乐观锁。CAS: 比较并交换,比较当前值和最新的值是否相等,相等则赋值。比如AtomicInteger: 在进行加1操作时,先比较当前对象上value的最新值和与原来的值是否相等,相当说明在取value值和要给value赋值过程没有变化,是一个原子操作。有变化则一直循环等待。value是使用volitile修饰的。Volatile 标识可见性,通过内存屏障实现,防止指令重排。即多线程环境下任何一个线程的修改变量的值,该变化会立即更新到主存。其他线程会感知到这个变化。即内存一致性协议或者总线锁模式。
- 悲观锁:即java中提供的各种锁。
- 可重入锁:即一个线程获取到锁之后,再次获取同一把锁的时候可以直接跳过获取锁的步骤。
- 公平锁:是指多个线程获取锁的时候,按照排队的顺序获取锁。先到先得原则。
- 非公平锁: 多个线程获取锁的时候,每个线程在获取锁的时候不检查是否有其他等待更久的线程,直接尝试获取锁,这会导致
- 如果上一个线程刚释放锁,唤醒下一个等待的线程去获得锁的过程,可能这时新来的线程优先获得了锁。
-
synchronized 就是非公平锁。
- 独占锁: 独占即一个线程获得锁后,其他线程在线程没有释放锁的期间都无法获得锁。
- 共享锁: 常见的读锁就是共享锁,即获取读锁的线程持有读锁后,其他线程获取读锁也可以获取锁。
jdk 锁 简介
最新推荐文章于 2024-09-25 23:50:43 发布