zoukankan      html  css  js  c++  java
  • 第十三章 显式锁

    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.读—写锁

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

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

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

    人生就像蒲公英,看似自由,其实身不由己。
  • 相关阅读:
    报错:Failed to create BuildConfig class
    emulator control无法使用问题
    the import android cannot be resolved
    报错:init: Could not find wglGetExtensionsStringARB!
    Android SDK升级后报错error when loading the sdk 发现了元素 d:skin 开头无效内容
    Eclipse Android环境搭建
    android中导入低版本project可能会遇到的编译问题(转自: Victor@Beijing)
    22.9
    GIT文档
    机器学习的几个问题探讨
  • 原文地址:https://www.cnblogs.com/walker993/p/9296322.html
Copyright © 2011-2022 走看看