美文网首页
关键字transient、volatile

关键字transient、volatile

作者: 学不好语文的LJ码农 | 来源:发表于2016-12-05 17:00 被阅读23次

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


transient

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

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

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

volatile

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

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

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

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

  • 对变量的写入操作不依赖变量的当前值,或者你能确保只有单个线程更新变量的值。
  • 该变量没有包含在具有其他变量的不变式中。

相关文章

网友评论

      本文标题:关键字transient、volatile

      本文链接:https://www.haomeiwen.com/subject/cuxlmttx.html