前言 解决并发编程中的可见性和有序性问题最直接的方法就是禁用CPU缓存和编译器的优化。但是,禁用这两者又会影响程序性能。于是我们要做的是 按需禁用CPU缓存和编译器的优化 。 如何按需禁用CPU缓存和编译器的优化就需要提到 Java内存模型 。Java内存模型是一个复杂的规范。其中最为重要的便是 规 ...
分类:
编程语言 时间:
2020-01-18 16:42:53
阅读次数:
72
前言 CPU 、内存、I/O设备之间的速度差距十分大,为了提高CPU的利用率并且平衡它们的速度差异。计算机体系结构、操作系统和编译程序都做出了改进: CPU增加了 缓存 ,用于平衡和内存之间的速度差异。 操作系统增加了 进程、线程 ,以时分复用CPU,进而均衡CPU与I/O设备之间的速度差异。 编译 ...
分类:
编程语言 时间:
2020-01-16 20:36:41
阅读次数:
110
目录 一、原子变量类简介 二、基本类型 三、引用类型 四、数组类型 五、属性更新器类型 参考资料 📦 本文以及示例源码已归档在 javacore 一、原子变量类简介 为何需要原子变量类 保证线程安全是 Java 并发编程必须要解决的重要问题。Java 从原子性、可见性、有序性这三大特性入手,确保多 ...
分类:
编程语言 时间:
2020-01-16 12:59:01
阅读次数:
101
说明 CSS中的mask属性允许用户屏蔽或剪裁特定点的图像来实现,部分或完全隐藏某个元素的可见性。 好吧,这个概念可能有点不好理解,先看图。 看了这个等式,似乎明白点什么了吧,朋友们,第一张图就是一张普通的图,第二张图,黑色部分是不透明的,白色部分是透明的,用上mask之后,两张图重叠,黑色区域中的 ...
分类:
Web程序 时间:
2020-01-16 00:56:08
阅读次数:
143
使用WPF的DataGrid的时候 会自定义列或者是绑定某些属性。 但是通常有些问题,获取不到或者没有数据。 因为Column是属性所以并不在逻辑树和视觉树中。 此时可以通过代理类来做中间部分。 将某些属性放置到或者绑定到这个类,DataGird的列在通过绑定就可以获取数据。 例如自定义Header ...
随着数据中心在规模、密度和复杂性上的快速增长,数据中心的管理者必须考虑数据中心的效率如何,以及数据中心是否运行在最佳状态?对此,用户一直在寻找更有效的管理工具来降低成本、提高操作性能、节约能源。这其中,数据中心基础设施的管理问题首当其冲。然而,在当前的数据中心,往往只能获得IT和基础设施的局部视图,这种静止和隔离的状态将会带来宕机的增加、低效和容量的浪费。因此,在数据中心管理中,消除基础设施管理和
分类:
其他好文 时间:
2020-01-09 01:04:53
阅读次数:
108
1.成员内部类:应用率低: (1)类中套类,外面的称为Outer外部类,里面的称为Inner内部类 (2)内部类通常只服务于外部类,对外不具备可见性。 (3)内部类对象通常是在外部类中创建。 (4)内部类中可以直接访问外部类成员(包括私有的) 内部类中有个隐私的引用指向了创建它的外部类对象 eg:外 ...
分类:
编程语言 时间:
2020-01-07 00:35:42
阅读次数:
122
前两篇文章已经介绍了多线程以及 JMM,我们说过多线程面对的安全问题体现在 `可见性 重排序`三个问题上。Synchronized 就是 Java 为我们提供的解决线程安全问题的一把锁。 以前我们都叫它重量级锁,是因为以前它的性能相比与其他锁要差很多,而且非常笨重。但是随着 JDK 1.6 中对 S ...
分类:
编程语言 时间:
2020-01-06 19:30:22
阅读次数:
76
并发:多个线程访问同一份资源。 并行:一边听歌一边写论文就是并行,同时做事。 volatile是java虚拟机提供的轻量级的同步机制。 voliatile有三大特性: 1.保证可见性。 2.不保证原子性。 3.禁止指令重排。 JMM(Java内存模型 Java Memory Model)本身是一种抽 ...
分类:
其他好文 时间:
2020-01-04 12:39:44
阅读次数:
56
众所周知,i++分为三步: 1. 读取i的值 2. 计算i+1 3. 将计算出i+1赋给i 可以使用锁来保持操作的原子性,用volatile保持值的可见性和操作顺序性; 如果仅仅是计算操作,我们自然就想到了java.util.concurrent.atomic包下的原子类,则不必考虑锁的升级、获取、 ...
分类:
其他好文 时间:
2020-01-01 16:28:19
阅读次数:
161