4.锁Lock对象

锁Lock对象

    Lock在jdk1.8前性能比synchronize好,
    Lock比synchronize代码灵活,用法多
    
    用synchronized时,多线程写作工作需要用wait、notify、notifyAll进行配合工作
    
    用Lock时,用Condition进行线程间的协作,Condition针对具体某一把锁而不是类。只有在锁的
              基础上才会产生Condition
              Lock lock = new ReentrantLock();
              Condition condition = lock.newCondition();
              condition.await()// Object中的wait()
              condition.signal()// notify()
              
        一个Lock对象可以产生多个Condtion进行多线程间的交互,可以唤醒部分线程,使其他线程等待
    
    重入锁,
            在需要进行同步的代码部分加上锁定,但不要忘记最后一定要释放锁定,不然会造成锁
            永远无法释放,其他线程永远进不来的结果
    
            Lock lock = new ReentrantLock();
            lock.lock();//加锁
            lock.unlock();//解锁  一般放在finally中
            
    公平锁和非公平锁(默认)
        Lock lock = new ReentrantLock(boolean isFair);true非公平, false公平
        非公平锁效率高于公平锁,因为不需要维护顺序
        
        tryLock(),尝试获得锁,返回true、false
        isFair(),是否公平锁
        isLocked(),是否锁定
        getHoldCount():查询当前线程保持此锁的个数,也就是调用lock()次数
        lockInterruptibly(),优先响应中断的锁
        getQueueLength():返回正在等待获取此锁定的线程数
        getWaitQueueLentth():返回等待与锁定相关的给定条件Condition的线程数
        hasQueueThread(Thread thread):查询指定的线程是否正在等待此锁
        hasQueueThreads();查询是否有线程正在等待此锁
        hasWaiters(),查询是否有线程正在等待与此锁有关的Condition条件
        
    读写锁(ReentrantReadWriteLock)
        就是实现读写分离的锁。尤其是读多写少的情况下,高于重入锁
        
        读读共享,写写互斥,读写互斥
        
    分布式锁
        在不同的JVM的相同的代码,一个线程进入另一个线程等待,用zookeeper注册中心做标识
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值