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)
  • 相关阅读:
    mysqladmin命令的用法
    利用cacti监控多端口memcache
    Msyqlproxy的编译安装
    eclipse下SVN subclipse插件
    Asp.net SqlDataSource用法 插入 更新 删除
    C#的匿名方法
    MDHH使用图解
    SVN入门及配置使用(多平台)
    编写Windows Live Writer插件(1)
    防止事件冒泡
  • 原文地址:https://www.cnblogs.com/blythe/p/7536558.html
Copyright © 2011-2022 走看看