理解volatile   volatile是java提供的一种轻量级的同步机制,所谓轻量级,是相对于synchronized(重量级锁,开销比较大)而言的.   根据java虚拟机的内存模型,我们知道其中规定了:共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),本地内存保存了被该线程使用到的主内存的副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量.   所谓同步,可以用如下这段同步格言来理解:如果向一个…
Java编程基础——标识符和关键字 摘要:本文主要介绍标识符和关键字. 标识符 是什么 Java语言中,为各种变量.方法.类和包等起的名字,统统称之为Java标识符. 命名规则 ◆ 应以字母.下划线.美元符开头,不能以数字开头,不能使用空格或非法的字符,如:#,%,&等. ◆ 后跟字母.下划线.美元符.数字. ◆ Java标识符大小写敏感,长度无限制. ◆ 不能使用关键字. 命名约定 ◆ 类和接口名:每个字的首字母大写,例如MyClass,HelloWorld等. ◆ 方法名:首字母小写,其余的…
transient [ˈtrænziənt] adj. 短暂的; 转瞬即逝的; 临时的 n 临时旅客; 瞬变现象; 候鸟; 1. transient的作用及使用方法       我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化.       然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性…
  首先,应该明白的是transient是java中的一个关键字,音标为 英: [ˈtrænziənt].   在了解transient关键字之前,应该先弄明白序列化和反序列化.所谓的序列化,通俗点的来说,就是将一个对象转化为字节序列的形式来表示,这些字节序列中包含了一个对象的相关属性信息.一个对象进行序列化之后,可以被存储到硬盘当中,也可以用于网络传输.而反序列化便是将一个对象的字节序列转化为原先的java对象,这个过程便是反序列化.   在java中,transient关键字的作用是让被该t…
谈到这个transient这个关键字,我们应该会立马想到序列化这个过程:什么是序列化?什么又是反序列化呢?序列化就是将对象转化内成二进制,而反序列化就是就二进制文件转换成对象的过程.一旦变量使用了transient之后,那么该变量是不会被序列化的.什么场景下使用这个关键字呢,比如说用户的密码这种敏感的字段来说,我们不希望通过网络去传输,而只需要让它存在于内存当中即可.不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient关键字.换句…
java关键字volatile volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变化值回写到主内存.这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值.       Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比.       这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化. …
可能使用final的三种情况:数据.方法.类. 1.final数据 final 常量必须是基本类型数据,且在定义时须赋值: 一个既是static又是final的域只占据一段不能改变的存储空间,只有一份:(使用全大写字母命名) 当用于对象引用,final使引用只能指向一个对象(实例化一次).对象本身可以修改. package chapter7; import java.util.Random; /** * final数据 */ class Value { int i; public Value(i…
​ 之前一直认为,super指向的是父类对象.到今天,仔细查询了资料,自己做了实验,确认这个结论是不对的.我们分一下几个点讨论下: super的作用: 第一种:用来访问父类被隐藏的成员变量 第二种:用来调用父类中被重载的方法 第三种:用来调用父类的构造函数 super真的指向父类对象吗? 代码直接分析: public class Super { public void test() { System.out.println("super test 执行了"); } } public c…
前言 上一章节简单介绍了线程安全以及最基础的保证线程安全的方法,建议大家手敲代码去体会.这一章会提到volatile关键字,虽然看起来很简单,但是想彻底搞清楚需要具备JMM.CPU缓存模型的知识.不要小看这个关键字,它在整个并发包(concurrent包)使用的非常广泛,掌握volatile关键字是非常重要的. 如果你是一个急性子,请看下面3点就行: 保证了多线程读取变量的可见性,一个线程修改volatile修饰的变量,另外一个线程会立即读取到新的值 禁止指令重排序 volatile关键字不会像…
目录 1.何谓序列化? 2.为何要序列化? 3.序列化与transient的使用 4.java类中serialVersionUID作用 5.transient关键字小结 前言 说实话学了一段时间java的朋友对于transient这个关键字依旧很陌生基本没怎么用过,但是transient关键字在java中却起到了不可或缺的地位!如果要说讲到,我觉得最可能出现的地方是IO流中对象流(也叫序列化流)的时候会讲到! 相信很多人都是直到自己碰到才会关心这个关键字,记得博主第一次碰到transient关键…