jdk 锁 简介

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值