zoukankan      html  css  js  c++  java
  • 线程安全的实现方法

    线程安全的实现方法

    i. 互斥同步

    实现方式:临界区(critical section)、互斥量(Mutex)、信号量(Semaphore)

    1. Java中最基本的互斥手段就是:synchronized关键字,经过编译后,会在同步代码前后分别形成monitorenter和monitorexit两个字节码,这两字节码都需要一个reference类型的参数指明要锁定和解锁的对象。如果synchronized指明对象参数,那就是这个对象的reference;若没指明,那就根据修饰的是实例方法还是类方法,去取相应的对象实例或者Class对象来作为锁对象。(就是synchronized后参数)(synchronized是重量级操作)

    2. Java.util.concurrent包中的重入锁(ReentrantLock)来实现同步。新加特性:

    a) 等待可中断:长期持有锁线程不释放时,等待进程可以选择放弃。

    b) 可实现公平锁:(synchronized和lock默认都是非公平的,lock可以通过构造函数中的布尔值要求使用公平锁)

    c) 锁可以绑定多个条件:通过多次调用newCondition()方法即可。

    3. 二者区别:lock表现为API层面的互斥锁(lock()和unlock()方法需要配合try/finally语句块来完成)。Synchronized变现为原生语法层面的互斥锁。

    ii. 非阻塞同步:基于冲突检测的乐观并发策略。(atomicInteger等)

    iii. 无同步方案

    1. 可重入代码(Reentrant Code)

    2. 线程本地存储(Thread Local Storage)
  • 相关阅读:
    解决无法安装Microsoft .Net Framework 3.5
    day11-15,装饰器
    Xmanager Power Suit 6.0.0009 最新版注册激活
    eth
    MySql 8.0 版本使用navicat连不上解决
    day11
    Mybatis使用规则
    nginx的基本配置
    Mybatis分页插件PageHelper使用
    dubbo的使用
  • 原文地址:https://www.cnblogs.com/blythe/p/7536558.html
Copyright © 2011-2022 走看看