标签:重排序

Java

BAT经典面试题,深入理解Java内存模型JMM

10

zhuangli 发布于 2019-05-16

Java 内存模型 Java 内存模型(JMM)是一种抽象的概念,并不真实存在,它描述了一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段、静态字段和构成数组对象的元素)的访问方式。试图屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到...

阅读(18)评论(0)赞 (0)

Java

Java并发中的内存模型

2

zhuangli 发布于 2019-05-12

JMM通过构建一个统一的内存模型来屏蔽掉不同硬件平台和不同操作系统之间的差异,让Java开发者无需关注不同平台之间的差异,达到一次编译,随处运行的目的,这也正是Java的设计目的之一。 CPU和内存 在讲JMM之前,我想先和大家聊聊硬件层面的东西。大家应该都知道执行运算操作的CP...

阅读(31)评论(0)赞 (0)

Java

Timer机制源码浅析

6

Harries 发布于 2019-05-10

Q:定时、延时任务有几种方式可以实现? A:Handler、Timer、ScheduledThreadPool、AlarmManager Handler机制大家应该都烂熟于心了,今天我来讲讲Timer这个不常被问到的定时器。 改日再说线程池,预计是周日。 Timer机制包含了四个...

阅读(17)评论(0)赞 (0)

Java

多线程笔记–锁(synchronized)

1

xiaoli.wang 发布于 2019-05-09

synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性,它可以: 原子性:确保线程互斥的访问同步代码 可见性:保证共享变量的修改能够及时可见 有序性:有效解决重排序问题。即“一个unlock操作先行发生(...

阅读(22)评论(0)赞 (0)

Java

死磕Java——volatile的理解

6

hanze 发布于 2019-05-07

理解 volatile 的相关知识前,先简单的认识一下JMM( Java Memory Model ), JMM 是 jdk5 引入的一种 jvm 的一种规范,本身是一种抽象的概念,并不真实存在,它屏蔽了各种硬件和操作系统的访问差异,它的目的是为了解决由于多线程通过共享数据进行通...

阅读(25)评论(0)赞 (0)

Java

神奇的Unsafe,你get了吗

22

小丁 发布于 2019-05-05

本文原创地址, 我的博客 : https://jsbintask.cn/2019/05/05/jdk/jdk8-unsafe/ (食用效果最佳),转载请注明出处! 简介 Unsafe 是jdk提供的一个直接访问操作系统资源的工具类(底层c++实现),它可以直接分配内存,内存复制,...

阅读(22)评论(0)赞 (0)

Java

Java并发编程学习体系

2

尖兵 发布于 2019-05-05

一、可见性、原子性、有序性(三大特性) 1)发生背景 由于cpu、内存、io设备的速度差异,做了以下优化 1、cpu 增加了缓存,以均衡与内存的速度差异 2、操作系统增加了进程、线程,以分时复用cpu,进而均衡cpu与io设备的速度差异 3、编译程序优化指令执行次序,使得cpu缓...

阅读(29)评论(0)赞 (0)

Java

深入浅出虚拟机难(JVM)?现在让它通俗易懂

13

邓龙华 发布于 2019-05-01

大家可以想想,JVM 是什么?JVM是用来干什么的?在这里我列出了三个概念,第一个是JVM,第二个是JDK,第三个是JRE。相信大家对这三个不会很陌生,相信你们都用过,但是,你们对这三个概念有清晰的知道么?我不知道你们会不会,知不知道。接下来你们看看我对JVM的理解。 (1):J...

阅读(32)评论(0)赞 (0)

Java

最全的JAVA知识汇总(附讲解和思维导图)

1

dulong 发布于 2019-04-29

微信公众号: 内核小王子 关注可了解更多关于数据库,JVM内核相关的知识; 如果你有任何疑问也可以加我微信pigpdong 点击阅读原文可以获取思维导图。(由于图片太大)有对数据库和微服务以及JVM核心知识的总结,大家可以保存下来 jvm 一行代码是怎么运行的 首先,java代码...

阅读(43)评论(0)赞 (0)

Java

Java内存模型-(1)

darida 发布于 2019-04-29

在介绍Java内存模型之前,先来看下计算机的内存模型,然后再来看Java内存模型在计算机的内存模型基础上做了哪些事情。 要说计算机的内存模型,首先来看下为何要有内存模型? 一、为什么要有内存模型 首先,“内存模型”是一个与计算机硬件有关的概念,先来看下有什么关系? CPU和缓存一...

阅读(22)评论(0)赞 (0)

Java

java锁浅析

1

Harries 发布于 2019-04-26

java开发中进行并发编程时针对操作同一块区域时,如果不加锁会出现并发问题,数据不是自己预计得到的值。我觉得有点像mysql事务中脏读、不可重复读、幻读的问题。加锁的目的是为了保证同一时间只有我一个人操作同一个资源。 如何在代码里面加锁 jdk提供给了我们很多锁的实现方式,用于各...

阅读(29)评论(0)赞 (0)

Java

Java单例模式实现

小丁 发布于 2019-04-25

单例模式可能是代码最少的模式了,但是少不一定意味着简单,想要用好、用对单例模式,还真得费一番脑筋。本文对Java中常见的单例模式写法做了一个总结,如有错漏之处,恳请读者指正。 饿汉法 顾名思义,饿汉法就是在第一次引用该类的时候就创建对象实例,而不管实际是否需要创建。代码如下: p...

阅读(26)评论(0)赞 (0)

Java

从单例模式到HappensBefore 原 荐

dulong 发布于 2019-04-24

目录 双重检测锁的演变过程 利用HappensBefore分析并发问题 无volatile的双重检测锁 双重检测锁的演变过程 synchronized修饰方法的单例模式 双重检测锁的最初形态是通过在方法声明的部分加上synchronized进行同步,保证同一时间调用方法的线程只有...

阅读(21)评论(0)赞 (0)

Java

多线程基础之synchronized和volatile

2

邓龙华 发布于 2019-04-19

多线程安全三大特性: (1)原子性: 指一系列操作要么一起执行完成,要么一起不执行。例如i++操作其实并不是原子的,线程需要先获取到i的值然后在线程内存中对i的值进行+1再刷新到主内存中,在这个期间可能有别的线程对i的值进行了修改,这样得出的结果就是错误的,所以我们需要同步锁Sy...

阅读(45)评论(0)赞 (0)

Java

Java虚拟机08——Java内存模型与线程

6

songhua.gao 发布于 2019-04-18

绝大多数的运算任务都不可能只靠处理器“计算”就能完成,处理器至少要与内存交互,如读取运算数据、存储运算结果等。由于计算机的存储设备与处理器的运算速度有接数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的...

阅读(41)评论(0)赞 (0)

Java

Java虚拟机08——Java内存模型与线程

6

zhuangli 发布于 2019-04-18

绝大多数的运算任务都不可能只靠处理器“计算”就能完成,处理器至少要与内存交互,如读取运算数据、存储运算结果等。由于计算机的存储设备与处理器的运算速度有接数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的...

阅读(64)评论(0)赞 (0)

Java

Java虚拟机08——Java内存模型与线程

6

xubiao.zhuang 发布于 2019-04-18

绝大多数的运算任务都不可能只靠处理器“计算”就能完成,处理器至少要与内存交互,如读取运算数据、存储运算结果等。由于计算机的存储设备与处理器的运算速度有接数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的...

阅读(24)评论(0)赞 (0)

Java

Java并发编程之指令重排序

4

hellas 发布于 2019-04-18

指令重排序 如果说 内存可见性 问题已经让你抓狂了,那么下边的这个指令重排序的事儿估计就要骂娘了~这事儿还得从一段代码说起: public class Reordering { private static boolean flag; private static int num...

阅读(36)评论(0)赞 (0)