synchronized,volatile,serialize,static关键字

synchronized:修饰方法,代码块。
互斥锁(对象锁),同步锁定,即保证了可见性又保证了原子性
Volatile:修饰变量,保证了可见性,但是不保证原子性,同时禁止指令重排序
可见性:是因为JMM将工作内存置为无效,每次线程读取和写入数据都是直接操作了主内存(lock指令的作用)
禁止指令重排序:
1)当程序执行到volatile变量的读操作或者写操作时,在其前面的操作的更改肯定全部已经进行,且结果已经对后面的操作可见;在其后面的操作肯定还没有进行
2)在进行指令优化时,不能将在对volatile变量访问的语句放在其后面执行,也不能把volatile变量后面的语句放到其前面执行
Serialize:代表序列化,一个类i想要可以序列化,必须实现序列化接口(Serializable),序列化是为了把对象变成流进行传递(内部外部序列化)。
1)序列化时,属性可以序列化,方法不可以,序列ID必须携程public static final形式的
2)序列化时,static和transient修饰的变量不可以序列化
3)反序列化时,需要class文件
static:修饰类,方法,成员变量(不可以修饰局部变量,局部变量和形参只能使用final修饰)。被static修饰的变量属于类本身,而不是某一个类的某一个实例对象。同时静态方法不可以直接访问非静态成员,因为类加载的顺序问题。静态块,方法中不能出现this,super。

上一篇:PHP 的 序列化与反序列化 自己的理解


下一篇:关于一道反序列化题的纠结