UnSafe类中的一些重要方法 JDK中的rt.jar保重Unsafe类中提供了硬件级别的原子性操作,Unsafe类中的方法都是navtice方法,他们使用JNI的方式访问C++实现库,下面我们来了解一下Unsafe提供的几个主要方法以及编程时如何使用Unsafe类做一些事情。 方法;返回指定变量所 ...
分类:
其他好文 时间:
2019-04-28 20:52:21
阅读次数:
201
x = 10; //语句1y = x; //语句2x++; //语句3x = x + 1; //语句4咋一看,有些朋友可能会说上面的4个语句中的操作都是原子性操作。其实只有语句1是原子性操作,其他三个语句都不是原子性操作。 语句1是直接将数值10赋值给x,也就是说线程执行这个语句的会直接将数值10写 ...
分类:
其他好文 时间:
2019-04-27 12:54:19
阅读次数:
155
原子性问题: 在一个线程中,对一个32的二进制数进行赋值操作,当低16位的数据写入后,发生了中断,而此时又有一个线程去读取这个写入的数据,必定得到的是一个错误的数据。在java中这种情况是不存在的,因为对基本数据类型的写入和赋值保证了原子性(i=10)。但仅限制于对基本数据类型,而变量的赋值就不能保 ...
分类:
其他好文 时间:
2019-04-26 17:52:22
阅读次数:
133
关键字:volatile 多线程的内存模型:main memory(主存)、working memory(线程栈),在处理数据时,线程会把值从主存load到本地栈,完成操作后再save回去(volatile关键词的作用:每次针对该变量的操作都激发一次load and save)。保证每次调用vola ...
分类:
编程语言 时间:
2019-04-25 15:56:07
阅读次数:
133
类、方法、成员变量和局部变量的可用修饰符 修饰符 类 成员访求 构造方法 成员变量 局部变量 abstract(抽象的) √ √ - - - static (静态的) - √ - √ - public(公共的) √ √ √ √ - protected(受保护的) √ √ √ - private(私有 ...
分类:
编程语言 时间:
2019-04-24 16:11:45
阅读次数:
153
锁是JAVA多线程关键,也是面试中必问的, 在此好好总结一下。 (先要从进程和线程说起,此处先欠下,回头专门说一下操作系统是怎么管理进程和线程的) 说到多线程就要说说JAVA的内存模型:图片来自于网络。 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中 ...
分类:
编程语言 时间:
2019-04-24 12:14:30
阅读次数:
110
小例子 输出结果: 若是不加volatile关键字呢? 输出结果: ...
分类:
其他好文 时间:
2019-04-22 20:42:24
阅读次数:
119
一、饿汉式 缺点:不能懒加载 二、懒汉式(线程不安全) 三、懒汉式(线程安全,效率低) 四、懒汉式(线程安全,效率高,但是有空指针异常) 五、懒汉式(解决四的问题,禁止指令重排序,加volatile关键字) 六、内部静态类的更加优雅的方式 ...
分类:
编程语言 时间:
2019-04-22 19:26:31
阅读次数:
140
volatile的作用 1.防止指令重排序 首先要理解什么是指令重排序?指令重排序的利弊?后续举例说明 2.多线程访问共享资源时,缓解synchronized重量级锁带来的性能问题 但是volatile在特定的场景下使用,才能发挥其作用。如果对其原理理解不透彻,使用不当,会带来很多问题。 volat ...
分类:
编程语言 时间:
2019-04-22 13:51:58
阅读次数:
128
学习了下c++中的const关键字,总结如下。 1、const限制一个变量不能修改其内容,如果强行修改的话,如下面代码这样子,编译就会报错,“表达式必须是可修改的左值”。 2、如果通过指针强行修改呢,如下面代码这样子。 编译可以通过,但是输出来之后可以看到a还是6,但是*p是12。 这是怎么回事?p ...
分类:
编程语言 时间:
2019-04-22 00:55:02
阅读次数:
155