1、数据一致性如何保证 (线程的安全和线程同步) 线程安全在三个方面体现: 1.原子性:提供互斥访问,串行线程(atomic,synchronized); 2.可见性:一个线程对主内存的修改可以及时地被其他线程看到,(synchronized,volatile); 3.有序性:一个线程观察其他线程中 ...
分类:
编程语言 时间:
2020-01-31 18:37:01
阅读次数:
110
1、认识volatile关键字 volatile是java提供的一种同步手段,只不过它是轻量级的同步,为什么这么说,因为volatile只能保证多线程的内存可见性,不能保证多线程的执行有序性。而最彻底的同步要保证有序性和可见性,例如synchronized。任何被volatile修饰的变量,都不拷贝 ...
分类:
其他好文 时间:
2020-01-29 21:42:42
阅读次数:
70
1、为什么要引入java内存模型 java是支持多线程的,但是其可见性,原子性,有序性是导致多线程bug的原因,所以引入java内存模型来解决这些问题。 2、什么是java内存模型 java内存模型概括来说是解决可见性和有序性的。 1)可见性 - 缓存导致 当创建线程时JVM会为其创建自己的内存存储 ...
分类:
编程语言 时间:
2020-01-21 23:50:12
阅读次数:
163
1、map简介 map 是关联容器的一种,map 的每个元素都分为关键字和值两部分,容器中的元素是按关键字排序的,并且不允许有多个元素的关键字相同。 注意:不能直接修改 map 容器中的关键字。因为 map 中的元素是按照关键字排序的,当关键字被修改后,容器并不会自动重新调整顺序,于是容器的有序性就 ...
分类:
编程语言 时间:
2020-01-20 13:16:46
阅读次数:
103
前言 解决并发编程中的可见性和有序性问题最直接的方法就是禁用CPU缓存和编译器的优化。但是,禁用这两者又会影响程序性能。于是我们要做的是 按需禁用CPU缓存和编译器的优化 。 如何按需禁用CPU缓存和编译器的优化就需要提到 Java内存模型 。Java内存模型是一个复杂的规范。其中最为重要的便是 规 ...
分类:
编程语言 时间:
2020-01-18 16:42:53
阅读次数:
72
运行结果如下: 两个线程一直等待对方释放持有的锁,然后一直等到死亡。。。 中间加睡眠时间,是为了防止线程一运行就获得两个对象的锁。 如何避免死锁的产生呢??? 造成死锁的原因其实和申请资源的顺序有很大关系,使用资源申请的有序性原则就可以避免死锁。 下面给几个建议: 避免一个线程同时获取多个锁; 避免 ...
分类:
其他好文 时间:
2020-01-18 12:29:35
阅读次数:
281
前言 CPU 、内存、I/O设备之间的速度差距十分大,为了提高CPU的利用率并且平衡它们的速度差异。计算机体系结构、操作系统和编译程序都做出了改进: CPU增加了 缓存 ,用于平衡和内存之间的速度差异。 操作系统增加了 进程、线程 ,以时分复用CPU,进而均衡CPU与I/O设备之间的速度差异。 编译 ...
分类:
编程语言 时间:
2020-01-16 20:36:41
阅读次数:
110
Colllection接口 List接口(列表) List的特点 有序性 允许有重复的元素 List的常用方法 |方法名称|描述|返回类型| | | | | |add(Ele)|参数类型为Object (追加)|boolean| |add(index,Ele)|指定位置添加元素|void| |add ...
分类:
编程语言 时间:
2020-01-16 20:32:49
阅读次数:
114
目录 一、原子变量类简介 二、基本类型 三、引用类型 四、数组类型 五、属性更新器类型 参考资料 📦 本文以及示例源码已归档在 javacore 一、原子变量类简介 为何需要原子变量类 保证线程安全是 Java 并发编程必须要解决的重要问题。Java 从原子性、可见性、有序性这三大特性入手,确保多 ...
分类:
编程语言 时间:
2020-01-16 12:59:01
阅读次数:
101
本文将会回答这几个问题: 1. 为什么会有多线程? 2. 什么是线程安全? 3. 怎么样保证线程安全? 为什么会有多线程 显然,线程安全的问题只会出现在多线程环境中,那么为什么会有多线程呢? 最早期的计算机十分原始,还没有操作系统。想要使用计算机时,人们先把计算机可以执行的指令刻在纸带上,然后让计算 ...
分类:
编程语言 时间:
2020-01-14 20:27:29
阅读次数:
267