美文网首页
同步锁Synchronized与Lock的区别

同步锁Synchronized与Lock的区别

作者: 凉风拂面秋挽月 | 来源:发表于2020-01-13 16:35 被阅读0次

    synchronized与Lock两者区别:

    1:Lock是一个接口,而Synchronized是关键字。

    2:Synchronized会自动释放锁,而Lock必须手动释放锁。

    3:Lock可以让等待锁的线程响应中断,而Synchronized不会,线程会一直等待下去。

    4:通过Lock可以知道线程有没有拿到锁,而Synchronized不能。

    5:Lock能提高多个线程读操作的效率。

    6:Synchronized能锁住类、方法和代码块,而Lock是块范围内的

    synchronized:在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。
    lock:需要显示指定起始位置和终止位置。一般使用ReentrantLock类做为锁,多个线程中必须要使用一个ReentrantLock类
    作为对象才能保证锁的生效。
    且在加锁和解锁处需要通过lock()和unlock()显示指出。所以一般会在finally块中写unlock()以防死锁。

    synchronized原始采用的是CPU悲观锁机制,即线程获得的是独占锁。独占锁意味着其他线程只能依靠阻塞来等待线程释放锁。
    而在CPU转换线程阻塞时会引起线程上下文切换,当有很多线程竞争锁的时候,会引起CPU频繁的上下文切换导致效率很低
    Lock用的是乐观锁方式。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,
    如果因为冲突失败就重试,直到成功为止。
    乐观锁实现的机制就是CAS操作(Compare and Swap)。我们可以进一步研究ReentrantLock的源代码,
    会发现其中比较重要的获得锁的一个方法是compareAndSetState。这里其实就是调用的CPU提供的特殊指令

    相关文章

      网友评论

          本文标题:同步锁Synchronized与Lock的区别

          本文链接:https://www.haomeiwen.com/subject/wqkkactx.html