美文网首页
线程安全

线程安全

作者: 丿九尾狸猫 | 来源:发表于2018-07-11 16:12 被阅读4次

原子性
操作对于其他线程是不可分割的(参见数据库的事务)
updateHostInfo(ip,port){
setIP(ip)
setPort(port)
}
上述操作就是非原子性操作

实现原子性的两种方法:
1.使用锁(lock),软件锁;
2.利用处理器提供的CAS(Compare-And-Swap)指令,硬件锁;

Java对于基本类型变量,long/double的写操作不保证原子性。使用volatile关键字保证原子性

可见性
一个线程对共享变量的修改应该让其他后续会使用该变量的线程得到更新的结果。 对于不同处理器的更新,可能仅仅被写入了高速缓存而不是内存,这对于其他处理器是不可见的,需要进行缓存同步。使用volatile关键字保证。

JLS Java语言规范保证,
父线程在启动子线程之前对共享变量的更新对于子线程是可见的;
一个线程终止后该线程对共享变量的更新对于调用该线程join方法的线程是可见的;

有序性
重排序
编译器和处理器对源代码在单线程运行环境下的优化。
指令重排序:源代码与程序顺序不一致(编译器 javac)、程序顺序与执行顺序不一致(JIT,处理器)。
存储子系统重排序:处理器感知顺序与上述三种顺序不一致(高速缓存,写缓冲器)。

上下文切换和资源征用。

相关文章

  • atomic & nonatomic

    什么是线程安全??? 线程安全:多线程操作共享数据不会出现想不到的结果就是线程安全的,否则,是线程不安全的。 at...

  • ConcurrentHashMap源码设计分析

    二、线程安全(Thread-safe)的集合对象:● Vector 线程安全● HashTable 线程安全● S...

  • HashMap 和 Hashtable 的区别

    线程安全: HashMap 是非线程安全的,而 Hashtable 是线程安全的,因为 Hashtable 内部的...

  • Java 的 StringBuffer 和 StringBuil

    区别就是:线程安全,StringBuffer 是线程安全的,StringBuilder 不是线程安全的。 他俩的实...

  • Java单例模式,线程安全

    懒汉式:线程安全,开销大 双重检查锁:线程安全,根据需求使用 静态内部类锁:线程安全,比较推荐 饿汗式:线程安全,...

  • 2018-06-12 第三十七天

    一、线程安全 线程安全的问题,是针对多线程的程序。单线程的情况下,是不存在线程安全问题。 产生线程安全问题的原因:...

  • 线程安全知多少

    1. 如何定义线程安全 线程安全,拆开来看: 线程:指多线程的应用场景下。 安全:指数据安全。 多线程就不用过多介...

  • JAVA 线程安全

    线程安全定义 一个类在可以被多个线程安全调用时就是线程安全的。 线程安全分类 线程安全不是一个非真即假的命题,可以...

  • synchronized锁

    一、线程安全的概念与synchronized 1、线程安全概念 并发程序开发的一大关注重点就是线程安全,线程安全就...

  • 线程安全的NSMutableDictionary

    NSDictionary是线程安全的,NSMutableDictionary是线程不安全的。利用锁来保证线程的安全...

网友评论

      本文标题:线程安全

      本文链接:https://www.haomeiwen.com/subject/bymldftx.html