• 第十三章 显式锁


    1.Lock(接口) 和 ReentrantLock(实现类)

    与内置加锁机制不同的是,Lock提供了一种无条件的、可轮询的、定时的以及可中断的锁获取方式,所有加锁和解锁的方法都是显式的。

    ReentrantLock实现了Lock接口,提供和synchronized相同的互斥性和内存可见性。

    2.为什么要创建一种与内置锁如此相似的新加锁机制?

    ReentrantLock并不是一种替代内置锁的方法,而是当内置加锁机制不适用时,作为一种可选择的高级功能。内置锁存在功能上的局限,比如:无法中断一个正在等待获取锁的线程,内置锁必须在获取该锁的代码块中释放,因此无法实现非阻塞结构的加锁规则。

    3.synchronized VS Lock

    1)synchronized是关键字,Lock是接口

    2)synchronized在发生异常时自动释放锁,Lock必须在finally()块中手动释放

    3)Lock可定时,可中断,可轮询,非块结构,公平/非公平锁

    4)Lock支持读写锁

    4.轮询锁与定时锁

    如果不能获取所有需要的锁,可使用可定时的或可轮询的锁获取方式,它会释放已经获得的锁,然后重新尝试获取所有锁。定时锁在给定的时间里使用独占锁。

    5.可中断的所获取操作

    在获得锁的同时保持对中断的响应。

    6.公平性

    公平的锁:线程按照申请的顺序获得锁,ReentrantLock默认使用非公平的加锁机制。

    7.读—写锁

    互斥(每次最多只有一个线程能持有该锁)是一种保守的加锁策略,虽然避免了“写/读”冲突和“写/写”冲突,但同样避免了“读/读”冲突。

    读/写锁:一个资源可以被多个读操作访问,或者被一个写操作访问,但两者不能同时进行。

    读锁会阻塞写,但不会阻塞读;写锁会阻塞读和写。

    人生就像蒲公英,看似自由,其实身不由己。
  • 相关阅读:
    [UVa514] Rails
    今日才真正懂了BFS
    [UVa11292] Dragon of Loowater
    [UVa] TEX Quotes
    白书杂七杂八
    [OpenJudge] Feed_Accounting
    [OpenJudge] Jolly_Jumpers
    Restart
    Collection of Websites
    Oracle11完全卸载方法
  • 原文地址:https://www.cnblogs.com/walker993/p/9296322.html
Copyright © 2020-2023  润新知