什么是内存屏障? 内存屏障,又称为内存栅栏,是一组处理器指令,用于实现对内存操作的顺序限制。 内存屏障为何重要? 对主存的一次访问一般花费硬件的数百次时钟周期。处理器通过缓存能够从数量级上降低内存延迟的成本,这些缓存为了性能重新排列待定内存操作的顺序。 也就是说,程序的读写操作不一定会按照它要求处理 ...
分类:
移动开发 时间:
2019-04-07 18:06:39
阅读次数:
195
单例设计模式,意味着整个系统中只能存在一个实例,比方说像日志对象这种。我们常说的有饿汉式和懒汉式这两种模式来创建单例对象,今天就拓展一下思维,多看几种。 首先我们若是想一个类只有一个对象,那肯定先要私有化构造器,断了在其它的类中使用构造器创建实例的念头。其它的类中不能创建,我们就只能在类中自己创建一 ...
分类:
其他好文 时间:
2019-03-12 14:09:16
阅读次数:
157
概念: volatile关键字,官方解释:volatile可以保证 可见性、顺序性、一致性 。 可见性:volatile修饰的对象在加载时会告知JVM,对象在CPU的缓存上对多个线程是同时可见的。 顺序性:这里有JVM的内存屏障的概念,简单理解为:可以保证线程操作对象时是顺序执行的,详细了解可以自行 ...
分类:
编程语言 时间:
2019-02-15 15:49:25
阅读次数:
279
1. final的简介 final可以修饰变量,方法和类,用于表示所修饰的内容一旦赋值之后就不会再被改变,比如String类就是一个final类型的类。即使能够知道final具体的使用方法,我想对final在多线程中存在的重排序问题也很容易忽略,希望能够一起做下探讨。 2. final的具体使用场景 ...
分类:
其他好文 时间:
2019-02-08 20:12:25
阅读次数:
174
Java线程安全 可见性,原子性,有序性 Java内存模型(JMM) Java内存模型(Java Memory Model)描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取变量这样的底层细节。 所有的变量都存储在主内存中。 每个线程都有自己独立的工 ...
分类:
编程语言 时间:
2019-02-06 13:17:11
阅读次数:
200
第一部分 走近java 第一章 java技术体系 官方所定义的java技术体系 java程序设计语言 各硬件平台上的java虚拟机 Class文件格式 java api类库 来自商业机构和开源社区的第三方java类库 我们可以把java程序设计语言、java虚拟机、java api类库这三部分统称为 ...
分类:
编程语言 时间:
2018-12-21 01:04:29
阅读次数:
228
synchronized是一个重量级的锁,volatile通常被比喻成轻量级的synchronized volatile是一个变量修饰符,只能用来修饰变量。 volatile写:当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存。 volatile读:当读一个vo ...
分类:
编程语言 时间:
2018-11-02 13:08:59
阅读次数:
260
读内存语义:当读一个 volatile 变量时,JMM 将该线程对应的本地内存置为无效,从主内存中读取共享变量。 写内存语义:当写一个 volatile 变量时,JMM 将该线程对应的本地内存中的共享变量值刷新到主内存。 读写内存语义加起来,就能保证可见性:一个线程修改了 volatile 修饰的共 ...
分类:
其他好文 时间:
2018-10-17 14:50:37
阅读次数:
181
Unsafe 类在 sun.misc 包下,不属于Java标准。但是很多 Java 的基础类库,以及优秀的三方库都会用这个提升性能。 Unsafe 使用了单例模式,想使用 Unsafe 类就需要获取实例。由于安全限制,不能用一般的方法获取这个实例,通常都是使用反射获取 Unsafe 类几类功能: 内 ...
分类:
编程语言 时间:
2018-09-14 17:16:49
阅读次数:
234