关键字transient、volatile

2016-12-05  本文已影响23人  学不好语文的LJ码农

以下内容整理自互联网,仅用于个人学习


transient

作用:加了该关键字的属性,不会被序列化。

换句话说,这个字段仅存于调用者内存,而不会写到磁盘里持久化。

序列化原理:将待序列化的对象中的信息写入到磁盘或网络流中。序列化中的引用会进行“深度复制”,并且如果两个对象有共同的引用对象,且两个对象都写入同一个流,那么该引用对象不会重复创建,只会创建一次,并还原到虚拟机后引用的还是同一个对象。但是,如果写入不同的流中,那么两次创建的是完全不同还原对象。

volatile

volatile变量是一种稍弱的同步机制在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比synchronized关键字更轻量级的同步机制。

每个线程访问堆中对象时,将堆中对象load到线程本地内存中,建立一个变量副本,之后线程就不再和对象在堆变量值有任何关系,而是直接修改副本变量值。
修改完之后,自动把线程变量副本的值写到对象在堆变量中。这样堆中对象的值就产生了变化。这些操作不是原子性的。

使用volatile修饰变量,JVM只是保证从内存加载到线程工作内存中的值是最新的。因此,即使使volatile还是会存在并发情况。

当且仅当满足以下所有条件时,才应该使用volatile变量:

上一篇 下一篇

猜你喜欢

热点阅读