zoukankan      html  css  js  c++  java
  • Synchroinzed 与lock 锁的区别

    1. 实现
      lock 是一个接口,而synchrized 是一个关键字。

    2. 释放锁

    lock 锁需要手动释放锁,且出现异常的时候,不能释放锁,所以一般都需要try catch处理释放锁,避免死锁
    synchronized 自动释放锁,

    1. 响应中断

    locl 可以通过标志位响应中断

    1. 线程调度

    synchroinzed 使用wait ,notify等待线程同步的方法, locl 使用condition 线程同步

    //Condition定义了等待/通知两种类型的方法
    Lock lock=new ReentrantLock();
    Condition condition=lock.newCondition();
    ...
    condition.await();
    ...
    condition.signal();
    condition.signalAll();
    
    1. 性能比较

    当竞争资源非常激烈时(即有大量线程同时竞争),此时Lock的性能要远远优于synchronized。

    synchroized 在1.6之前使用的是重量级锁,那在1,6之后 进行了一系列的锁优化:有适应自旋,锁消除,锁粗化,轻量级锁,偏向锁等等。导致在Java1.6上synchronize的性能并不比Lock差。官方也表示,他们也更支持synchronize,在未来的版本中还有优化余地。

    1. 使用场景

    在非常复杂的同步应用中,请考虑使用ReentrantLock,特别是遇到下面2种需求的时候。

    1.某个线程在等待一个锁的控制权的这段时间需要中断
    2.需要分开处理一些wait-notify,ReentrantLock里面的Condition应用,能够控制notify哪个线程
    3.具有公平锁功能,每个到来的线程都将排队等候

  • 相关阅读:
    React native 之 图标库ECharts的使用
    使用jquery给html标签加点击事件
    React native 之 async/await
    CSS布局之flexbox
    Swiper 的引入
    给浏览器设置一张背景图,并且拉动浏览器大小时图片不要被压缩变形
    境界的彼方_lduoj_bfs宽搜
    2021美国大学生数学建模大赛==ABCDEF+思路解析==
    3045 Lcm与Gcd构造
    对拍程序
  • 原文地址:https://www.cnblogs.com/liuyupen/p/14204072.html
Copyright © 2011-2022 走看看