基础篇幅:线程基础知识、并发安全性、JDK锁相关知识、线程间的通讯机制、JDK提供的原子类、并发容器、线程池相关知识点 高级篇幅:ReentrantLock源码分析、对比两者源码,更加深入理解读写锁,JAVA内存模型、先行发生原则、指令重排序 环境说明: idea、java8、maven 第四章-- ...
分类:
编程语言 时间:
2018-11-09 12:12:49
阅读次数:
187
织梦首页/列表页文章按权重排序,dede:arclist 按权重排序输出文章,dede:list 按权重排序输出文章 ...
分类:
编程语言 时间:
2018-11-06 11:23:15
阅读次数:
200
一、基础篇 JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别 Java内存模型 内存可见性、重排序、顺序一致性、volatile、锁、final 垃圾回收 内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定 JVM参数及调优 Java对象模型 oop-klass、对象头 ...
分类:
其他好文 时间:
2018-11-06 00:48:40
阅读次数:
231
在执行程序时为了提高性能,提高并行度,编译器和处理器常常会对指令做重排序。重排序分三种类型: 问题:重排序都可能会导致多线程程序出现内存可见性问题 1)编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。 2)指令级并行的重排序。处理器多条指令重叠执行,改变语句对应 ...
分类:
编程语言 时间:
2018-11-02 20:17:23
阅读次数:
138
js的sort方法,我们一般传入一个回调用于单排序,也就根据某一个条件排序,那么一个场景需要多条件排序(多重排序),我们怎么处理呢? 如下例子,我们按学生的总分排序,如果总分相等,我们再按照语文成绩排序。 关键点在于sort回调如何定义排序规则 ...
分类:
编程语言 时间:
2018-10-30 21:15:35
阅读次数:
444
1、privat static Singleton 要加votatile关键字修饰,防止对象的初始化代码与引用赋值代码进行重排序。 2、getInstance方法,最外层要加if (instance == null),然后加锁synchronized,然后再加if (instance == null ...
分类:
编程语言 时间:
2018-10-22 22:23:16
阅读次数:
200
volitile和synchronize volitile可以保证可见性,不能保证原子性,禁止重排序 synchronize:既然可以保证可见性又能 保证原子性 重排序: cpu对代码实现优化,不会对有依赖关系的做重排序(多线程情况下) 多线程情况下是没有影响的 数据依赖性 如果两个操作访问同一个变 ...
分类:
编程语言 时间:
2018-10-22 20:30:25
阅读次数:
198
问题描述: 有一个list集合,其中元素是Student对象,根据student的age排序。 Student对象 此类需要实现Comparable接口,重写compareTo方法 测试类: 利用Collections.sort()方法进行重排序。 输出结果: 正序倒序,只需改变实体中的compar ...
分类:
编程语言 时间:
2018-09-29 11:17:57
阅读次数:
226
对于本篇文章,将从四个概念来介绍:内存模型基础,重排序,顺序一致性和happens-before 1.内存模型基础 在并发编程中,有两个关键问题:线程之间如何通信和如何同步。由此而引出了两种并发模型:共享内存的并发模型和消息传递的并发模型。 1.1 消息传递的并发模型 该模型是指两个线程之间通过发送 ...
分类:
编程语言 时间:
2018-09-29 11:11:58
阅读次数:
261
这是两个不同的概念。 程序顺序指的是代码的先后顺序。 执行顺序可能受到重排序的影响,不一定和程序顺序保持一致,具有不确定性。 见: 《 "单线程程序语义" 》 《 "haappen before 规则" 》 ...
分类:
其他好文 时间:
2018-09-28 10:56:53
阅读次数:
161