zoukankan      html  css  js  c++  java
  • 并发编程-内置锁

    内置锁

    如果一个类中,存在多个原子变量,那么在对这些状态变更的时候,需要注意状态修改的原子性和一致性。
    为了保证多线程之间互不影响,我们需要使用同步代码块或者在影响状态的方法上面加锁,从而保证状态的修改是线程安全的。

    内置锁的形式:

    synchronized (lock){
    }
    

    每一个Java对象都可以用作一个实现同步的锁,这些锁也可以称作”内置锁(Intrinsic Lock)”或者“监视器锁(Monitor Lock)”。线程在进入同步代码块之前会自动获得锁,并且在退出代码块时会自动释放锁,不论是正常执行顺序退出还是跑出异常退出代码块,都会释放锁。

    Java的内置锁是一种互斥锁,这意味着最多只能有一个线程能持有这种锁。同时这也意味着,可以同时进入代码块的原子对象是“线程”,而不是调用。

    可重入锁

    获得了同一个“对象锁”,或者说“内置锁、监视器锁”的同一个线程可以自由进出被该对象锁锁住的代码块,可重入锁就是这个意思。

    可重入锁的一个实现方式是:为每个锁关联一个获取计数值和一个所有者线程。当计数值为0时,这个锁就被认为是没有被任何线程持有。当线程请求一个未被持有的锁时,JVM将记下锁的所有者,并且将获取计数设置为1。如果同一个线程再次进入代码块,或者再次请求同一个对象锁,那么让这个对象锁的计数值再加1。而当线程退出同步代码块时,计数器也会相应的递减。当计数值为0时,这个锁将会被释放。

    用锁来保护状态

    由于锁能使其保护的代码以串行形式被执行,因此可以通过锁来实现对共享状态的独占访问。

    起风了,努力生存
  • 相关阅读:
    showModalDialog 超过问题
    工作流,WEB框架,UI组件网络收集整理
    VSS使用方法详解
    Windows远程桌面连接命令mstsc
    Nginx 配置简述
    jQuery编程代码规范的最佳实践
    TinyMCE(富文本编辑器)在Asp.Net中的使用方法
    扣文转文方法
    VS2013 EMMET插件学习
    为革命保护视力 --- 给 Visual Studio 换颜色
  • 原文地址:https://www.cnblogs.com/StivenYang/p/12858073.html
Copyright © 2011-2022 走看看