synchronized,volatile,serialize,static关键字

时间:2020-11-12 00:04:29   收藏:0   阅读:56

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。

原文:https://www.cnblogs.com/junwei121/p/13961516.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!