java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3837|回复: 1

【java并发编程】synchronized与Lock比较 区别 java自学网

[复制链接]
  • TA的每日心情
    开心
    2021-5-25 00:00
  • 签到天数: 1917 天

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66345

    宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2015-7-18 14:18:49 | 显示全部楼层 |阅读模式
    关于java高级的编程,我们可能都会提到java并发,那么有多少在java并发中需要注意呢?java并发我们一般拿什么技术应对呢?synchronized与Lock比较 区别,下面是本人总结,仅供参考:. I0 O- i: b% J. }0 a! t
    + v2 P0 M8 y- M3 Y1 @* ^4 |9 ?
    1、总体来看,Lock更加的灵活,synchronized能实现的,Lcok都可以实现
    & ~* D& S+ F2 P1 z  ]" i$ @' X) S0 N3 X  [0 S6 s! C% f3 N
    2、在多个条件变量或竞争激烈的情况下 ReentrantLock更有优势
    : L# P" `8 F. J. I% p1 u1 z
    + v5 D6 `% W+ N, z3 k0 I5 w, `8 K3、ReentrantLock通过代码实现的,必须在finally中释放锁,在其中加入unLock()
    " f; v6 j9 W. S+ E" x) p。synchronized是在jvm层面上实现的,可以用一些监控工具监控锁,在代码执行出现异常的时候,synchronized则是自动释放锁的: W$ d% \% I5 x2 _4 u7 ]

    ) A; c3 I/ ?) E5 q1 k( a; h4、ReentrantLock有可轮询的锁请求,如果获取成功,则进行处理,如果不成功,可等待下一次轮询处理,不容易产生死锁。但synchronized则需要一直等待下去,容易产生死锁1 C6 Y! |0 P3 \. d9 @, U
    例:
    4 M# M. s, P3 P- yA、B线程都要获取对于对象O的锁定,那么A获取到了锁,B需要等A释放后获得: Y7 Q& p2 w' c
    如果使用synchronized的话,如果A不释放,那么B会一直等待下去,不能中断0 S7 j8 f0 Z0 i* m& o" X: @
    如果使用ReentrantLock,B可以在等待一段时间后中断等待,去做别的事情
    ) ?- U% f8 w! `9 G0 V# }8 V6 \9 j5 z, q; Y" w8 n! O& H5 D5 V
    5、ReentrantLock获取锁定与三种方式:
    4 q& _( k1 Q: X  ~, o    a)  lock(), 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁
    ' _. v% E9 `1 V, Q7 P/ h% F" L6 @% f  W& P+ A, H- L3 T. ?
        b) tryLock(), 如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false;0 U8 R- L9 ^8 n# a) h0 e
    % j; }1 H( R% d9 w
        c) tryLock (long timeout, TimeUnit  unit),  如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false;' `5 n; B' c2 q
    2 }. L7 K/ ~. f5 s. a2 T
        d) lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到获得锁定,或者当前线程被别的线程中断* w  g0 m5 F7 m) W* V9 w2 x  n

    " m& a& J0 ^6 _1 S3 l3 ?! {' t
    : t+ Y1 r: T* l6 Y! Z7 ~2 `! ^; s# Z
    ) j- F4 t) ]$ S* A0 n5 m

      V9 f% H* P: Y( k5 w7 L
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-11-20 16:20
  • 签到天数: 1 天

    [LV.1]初学乍练

    0

    主题

    27

    帖子

    63

    积分

    普通会员

    Rank: 2

    积分
    63
    发表于 2016-11-20 16:44:54 | 显示全部楼层
    不错好资源 可以用
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2024-11-21 20:48 , Processed in 0.140252 second(s), 34 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表