Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题。 Java中每一个对象都可以作为锁,这是synchronized实现同步的 ...
分类:
编程语言 时间:
2017-08-24 21:20:11
阅读次数:
222
[转载自并发编程网 – ifeve.com 原文链接:http://ifeve.com/tag/jmm/] 数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型: 上面三种情况,只要重排序两个操作的执行顺序,程序的执行结果将 ...
分类:
编程语言 时间:
2017-08-09 21:10:14
阅读次数:
249
与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则: 下面,我们通过一些示例性的代码来分别说明这两个规则: [java] view plain copy public class FinalExample { in ...
分类:
编程语言 时间:
2017-08-09 21:06:35
阅读次数:
193
final域的内存语义写final域的重排规则:禁止把final域的写重排序到构造方法之外,主要包括俩个个方面1)JMM禁止编译器把final域的写重排序到构造方法之外2)编译器会在final域写之后,构造函数return之前插入一个storestore屏障,这个屏障禁止处理器把final域的写重排序到构造..
分类:
编程语言 时间:
2017-08-07 17:36:45
阅读次数:
146
深入理解Java内存模型(一)——基础 深入理解Java内存模型(二)——重排序深 入理解Java内存模型(三)——顺序一致性 深入理解Java内存模型(四)——volatile 深入理解Java内存模型(五)——锁 深入理解Java内存模型(六)——final 深入理解Java内存模型(七)——总 ...
分类:
编程语言 时间:
2017-08-04 20:29:28
阅读次数:
175
volatile写的内存语义: 当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值刷新到主内存。 volatile读的内存语义: 当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效,线程接下来将从主内存中读取共享变量。 重排序: 能否重排序 第二个操作 ...
分类:
其他好文 时间:
2017-08-02 23:21:57
阅读次数:
197
一、封装 1.作用:有效保护对象的状态(即属性值)。 2.外部调用:提供属性对应的get/set方法。 3.优点:避免对数据直接操作导致的错误和安全问题;保护数据的完整性,提升程序的可维护性。 二、继承 1.作用:提取重复代码到统一的类中,通过extends关键字实现继承关系。 2.优点:消除代码重 ...
分类:
编程语言 时间:
2017-07-31 13:26:26
阅读次数:
168
Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来 ...
分类:
编程语言 时间:
2017-07-30 11:34:05
阅读次数:
212
Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题。从语法上讲,Synchronized总共有三种用法: (1)修饰普通方法 ...
分类:
编程语言 时间:
2017-07-19 14:06:58
阅读次数:
156
Trie树,即字典树或单词查找树,主要用于大量字符串的检索、去重、排序等操作。 主要原理就是利用字符串的公共前缀建立一棵多叉树,牺牲空间换取时间。 用Trie树求一个string的所有不相同的子串: ...
分类:
其他好文 时间:
2017-07-17 23:49:25
阅读次数:
255