首先介绍三个概念: (1)作用域:作用域描述了程序中可以访问一个标识符的一个或多个区域。 一共有三种作用域:代码块作用域、函数原型作用域和文件作用域 a.代码块作用域:一个代码块是包含在开始花括号和对应结束花括号之间的一段代码,在代码块内定义的变量具有代码块作用域,从该变量定义的地方到包含该定义的代 ...
分类:
其他好文 时间:
2019-02-07 14:52:30
阅读次数:
159
volatile关键字很重要的两个特性: 1、保证变量在线程间可见,对volatile变量所有的写操作都能立即反应到其他线程中,换句话说,volatile变量在各个线程中是一致的(得益于java内存模型—"先行发生原则"); 2、禁止指令的重排序优化; 所以volatile 并非原子性操作。 Ato ...
分类:
编程语言 时间:
2019-01-28 17:43:27
阅读次数:
204
Java volatile关键字解读 多变的,易变的 volatile访问内存内存模型: 1.常用变量是由主内存加载到缓存,线程进一步获取变量内容。 2.volatile每次访问直接访问主内存cpu,保证缓存一致性,实现轻量级同步 Demo public class VolatileDemo { p ...
分类:
编程语言 时间:
2019-01-28 12:05:55
阅读次数:
174
volatile的作用:1.内存可见性2.禁止指令重排序可见性是指,在多线程环境下,共享变量的操作对于每个线程来说,都是内存可见的,也就是每个线程获取的volatile变量都是最新值;并且每个线程对volatile变量的修改,都直接刷新到主存。下面重点介绍指令重排序。一、为什么要指令重排序为了提高程 ...
分类:
其他好文 时间:
2019-01-27 21:46:13
阅读次数:
186
java1.8中的ConcurrentHashMap做了非常大的改动,整个数据结构都发生了变化,已经不存在segment了。所以要好好重新查看下源码。这篇博客是逐步更行的,看一点写一点。 首先看一个很重要的参数sizeCtl,这是一个volatile变量,从名字就可以看出,这是一个大小控制参数。这个 ...
分类:
编程语言 时间:
2019-01-27 21:29:56
阅读次数:
354
在多线程中,为了使得某个变量对任意一个线程可见,会使用volatile对该变量进行修饰。 理解volatile之前,要先知道线程是如何调用变量的。每一个线程都拥有自己的一个私有堆栈,变量是定义在主内存中,而每个线程会将变量copy一份到私有堆栈。每次启动线程操作,都会先从主内存读取熟读到私有堆栈,然 ...
分类:
编程语言 时间:
2019-01-27 19:16:09
阅读次数:
188
1、保持内存可见性内存可见性:所有线程都能看到共享内存的最新状态。每次读取前必须先从主内存刷新最新的值。每次写入后必须立即同步回主内存当中。Java通过几种原子操作完成工作内存和主内存的交互:lock:作用于主内存,把变量标识为线程独占状态。unlock:作用于主内存,解除独占状态。read:作用主 ...
分类:
其他好文 时间:
2019-01-26 00:21:17
阅读次数:
163
volatile特性 内存可见性:通俗来说就是,线程A对一个volatile变量的修改,对于其它线程来说是可见的,即线程每次获取volatile变量的值都是最新的。 volatile的使用场景 通过关键字sychronize可以防止多个线程进入同一段代码,在某些特定场景中,volatile相当于一个 ...
分类:
编程语言 时间:
2019-01-25 17:36:36
阅读次数:
134
synchronized java课上讲到过synchronized 首先看看用synchronized和没用synchronized的区别 import lombok.Getter; /** * @author yintianhao * @createTime 20190123 16:28 * @ ...
分类:
其他好文 时间:
2019-01-23 22:12:06
阅读次数:
174
一、JSP中的声明语句块 在JSP页面中使用<%!%>括起来的部分,称为声明语句块。声明语句块中的内容,将被JSP引擎翻译到Servlet的类体中,是不会被包含到某个方法中的。 这样的话,在JSP的声明语句块中就可以声明实例变量、实例方法、静态方法、静态代码块等内容。并且,这些内容均可被JSP的的J ...
分类:
Web程序 时间:
2019-01-23 10:42:36
阅读次数:
310