手写可重入锁(Lock)

  • 可重入锁
    lock 来保证原子性。
    什么是原子性,就是不可分,从头执行到尾,不能被其他线程同时执行。
    可通过CAS来实现原子操作
    CAS(Compare and Swap):
    CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。
    CAS主要通过compareAndSwapXXX()方法来实现,而这个方法的实现需要涉及底层的unsafe类
    unsafe类: java不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe类提供了硬件级别的原子操作。

顺便记录下java中实现原子操作的类

  1. AtomicIntegerFieldUpdater:原子更新整型的字段的更新器
  2. AtomicLongFieldUpdater:原子更新长整型字段的更新器
  3. AtomicStampedReference:原子更新带有版本号的引用类型。该类将整型数值与引用关联起来,可用于原子的更新数据和数据的版本号,可以解决使用CAS进行原子更新时可能出现的ABA问题。
  4. AtomicReference :原子更新引用类型
  5. AtomicReferenceFieldUpdater :原子更新引用类型里的字段
  6. AtomicMarkableReference:原子更新带有标记位的引用类型。可以原子更新一个布尔类型的标记位和应用类型
  7. AtomicIntegerArray :原子更新整型数组里的元素
  8. AtomicLongArray :原子更新长整型数组里的元素
  9. AtomicReferenceArray : 原子更新引用类型数组的元素
  10. AtomicBooleanArray :原子更新布尔类型数组的元素
  11. AtomicBoolean :原子更新布尔类型
  12. AtomicInteger: 原子更新整型
  13. AtomicLong: 原子更新长整型

  • 自定义不可重入锁
public class Lock {
   

    private boolean isLocked = false;

    public synchronized void lock() throws InterruptedException
    {
   
        while (isLocked){
   
            wait();
        }
        isLocked = true;
    }

    public synchronized void unlock(){
   
        isLocked = false;
        notify();
    }
}
--------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值