synchronized是一个重量级的锁,volatile通常被比喻成轻量级的synchronized volatile是一个变量修饰符,只能用来修饰变量。 volatile写:当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存。 volatile读:当读一个vo ...
分类:
编程语言 时间:
2018-11-02 13:08:59
阅读次数:
260
JMM (Java Memory Model) java内存模型 Java内存模型的抽象 Java线程之间的通信由Java内存模型(本文简称为JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。 从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内 ...
分类:
其他好文 时间:
2018-10-31 17:55:37
阅读次数:
177
前段时间在某个第三方平台看到我写作字数居然突破了 10W 字,难以想象高中 800 字作文我都得巧妙的利用换行来完成(懂的人肯定也干过😏)。 干了这行养成了一个习惯:能撸码验证的事情都自己验证一遍。 于是在上周五通宵加班的空余时间写了一个工具: https://github.com/cros... ...
分类:
编程语言 时间:
2018-10-29 10:24:23
阅读次数:
203
一、说说概念 1、进程(process) 狭义定义:进程就是一段程序的执行过程。 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。 简单的来讲进程的概念主要有两点:第一,进程是一 ...
分类:
编程语言 时间:
2018-10-27 00:26:15
阅读次数:
167
JVM内存结构 Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。其中有些区域随着虚拟机进程的启动而存在,而有些区域则依赖用户线程的启动和结束而建立和销毁。 结构如下: JVM内存结构:由Java虚拟机规范定义,描 ...
分类:
编程语言 时间:
2018-10-24 15:27:23
阅读次数:
210
字符串函数操作 isprintable():判断一个字符串中所有字符是否都是可打印字符的. 与isspace()函数很相似 如果字符串中的所有字符都是可打印的字符或字符串为空返回 True,否则返回 False istitle():判断一个字符串中所有单词的首字母是不是大写 返回值为布尔类型,Tru ...
分类:
编程语言 时间:
2018-10-21 21:51:35
阅读次数:
284
Java内存模型即JavaMemoryModel,简称JMM。JMM定义了Java虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。原始的Java内存模型效率并不是很理想,因此Java1
分类:
编程语言 时间:
2018-10-18 00:53:15
阅读次数:
147
读内存语义:当读一个 volatile 变量时,JMM 将该线程对应的本地内存置为无效,从主内存中读取共享变量。 写内存语义:当写一个 volatile 变量时,JMM 将该线程对应的本地内存中的共享变量值刷新到主内存。 读写内存语义加起来,就能保证可见性:一个线程修改了 volatile 修饰的共 ...
分类:
其他好文 时间:
2018-10-17 14:50:37
阅读次数:
181
为何需要java内存模型(Java Memory Model,JMM): 用于屏蔽各种操作系统和硬件之间的内存访问差异,使得java能够在各种平台下能够达到一致的运行结果。 java内存模型(虚拟机内存): 1、主内存:所有的变量都存储在主内存。(线程私有的变量,不存在主内存中) 2、工作内存:线程 ...
分类:
编程语言 时间:
2018-10-17 00:28:41
阅读次数:
163
https://shipilev.net/talks/narnia-2555-jmm-pragmatics-en.pdf https://shipilev.net/blog/2014/jmm-pragmatics/ https://shipilev.net/blog/2016/close-encou ...
分类:
编程语言 时间:
2018-10-05 10:40:02
阅读次数:
121