美文网首页
并发编程之数据一致性问题

并发编程之数据一致性问题

作者: 老街老街 | 来源:发表于2019-08-02 17:03 被阅读0次

三个概念:原子性,可见性,有序性。

原子性:要么成功,要么失败。

可见性:是指共享数据的时候,一个线程修改了数据,其他的线程知道数据被修改,会从主存中重新读取数据。

有序性:代码的有序性,因为代码可能发生指令重排序。

volatile关键字作用:

1.某个线程修改了被volatile关键字修饰变量是,根据数据一致性的协议,通过信号量,更改其他线程的高速缓存中volatile关键字修饰变量状态为无效状态,其他线程如果需要重写读取该变量会再次从主内存中读取,而不是读取自己的高速缓存中的。

2.被volatile关键字修饰变量不会指令重排序。

volatile不能保证原子性,需要用锁来保证,在方法加上synchronized

ThreadLocal类来保证线程封闭:

ThreadLocal类能使线程中的某个值与保存值的对象关联起来,它提供了get、set方法,这些方法为每个使用该变量的线程保存一份独立的副本,因此get总是set当前线程的set最新值。

相关文章

  • 并发编程基础

    并发编程 并发编程主要解决两个问题: 线程之间如何通信,指线程之间以何种机制交换信息。 线程之间如何同步,指程序控...

  • JMM内存模型简介

    1.并发编程模型的两个关键问题 并发编程中需要处理两个关键问题:线程之间如何通信和线程之间如何同步。通信是指线程之...

  • 并发编程之数据一致性问题

    三个概念:原子性,可见性,有序性。 原子性:要么成功,要么失败。 可见性:是指共享数据的时候,一个线程修改了数据,...

  • java并发(3)内存模型

    基础知识 并发编程引发的问题 并发编程需要关注两个问题. 线程之间是如何通信的? 线程之间是如何同步数据的? 在现...

  • Java内存模型基础

    Java内存模型 并发编程模型中的两个关键问题 在并发编程中有两个关键的问题: 线程之间如何通信 线程之间如何同步...

  • Java内存模型

    并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发...

  • Java 内存模型

    并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发...

  • Java内存模型

    2.7 Java内存模型 2.7.1 并发编程模型 在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间...

  • JMM之重排序&Happens-Before

    并发编程中,需要处理两个关键问题: 线程之间如何通信?—共享内存+消息传递 线程之间如何同步? java的并发采用...

  • Java内存模型基础

    Java内存模型的基础 并发编程模型的两个关键问题 在并发编程种,需要处理两个关键问题:线程之间如何通信及线程之间...

网友评论

      本文标题:并发编程之数据一致性问题

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