synchronized与Lock比对

Lock:

  1. 可以显示指定起始位置和终止位置,提高了可操作性
  2. 可中断的获取锁【lock.lockInterruptibly()】:当线程在等待获取锁时,如果调用interrupt(),则会抛出InterruptedException 中断锁等待
  3. 超时锁【tryLock(…)】:可以设定锁的等待超时时间(不设置时立即返回结果true/false),超时后,中断等待。
  4. Lock用的是乐观锁方式:所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁实现的机制就是CAS操作(Compare and Swap)。
  5. 公平锁机制:即对于多线程来说,公平锁会依赖线程进来的顺序,后进来的线程后获得锁。而非公平锁的意思就是后进来的锁也可以和前边等待锁的线程同时竞争锁资源。对于效率来讲,当然是非公平锁效率更高,因为公平锁还要判断是不是线程队列的第一个才会让线程获得锁。
  6. ReentrantLock里面的Condition应用,能够控制notify哪个线程,替代“等待/通知”
    volatile boolean isProcess = false;
    ReentrantLock lock  = new ReentrantLock();
    Condtion processReady = lock.newCondtion();
    thread: run() {
        lock.lock();
        isProcess = true;
       try {
        while(!isProcessReady) {  //isProcessReady 是另外一个线程的控制变量
          processReady.await();//释放了lock,在此等待signal
         }catch (InterruptedException e) {
              Thread.currentThread().interrupt();
            } finally {
              lock.unlock();
              isProcess = false;
            }
          }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值