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

    内置锁

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

    内置锁的形式:

    synchronized (lock){
    }
    

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

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

    可重入锁

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

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

    用锁来保护状态

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

    起风了,努力生存
  • 相关阅读:
    hibernate缓存清除(转)
    hibernate缓存
    hibernate延迟加载
    session进行增删改查操作
    curl命令详解
    CURL 宏定义列表
    CURL常用命令---样例
    打印 上一主题 下一主题 利用cURL实现单个文件分多段同时下载,支持断点续传(修订版)
    curl断点续载
    CURL常用命令
  • 原文地址:https://www.cnblogs.com/StivenYang/p/12858073.html
Copyright © 2011-2022 走看看