一:Synchronized 序列化
解决:多线程同步时数据共享的问题。
使用方法:
(1) 同步方法
Public synchronized void a(){************}
或
Public void a(){
******
Synchronized(this); }
此时,锁定的是调用该方法的对象,this即表示这个对象。
(2) 同步代码块
Public void a(String name){
*****
Synchronized(name);}
Name即锁,抢占到的name控制当前该段代码。当有明确对象时,可以使用该方法。
(3) 代码同步
解决方法:创建一个变量充当锁
Class A implements Runnable{
Private byte[] a ={********};//变量
Public void method(){
Synchronized(a);
}
}
*注:零长度的byte数组对象创建起来将比任何对象都经济――查看编译后的字节码:生成零长度的byte[]对象只需3条操作码,而Object lock = new Object()则需要7行操作码。
(4)
Class Foo{
(1) Public synchronized static void a(){****}
(2) Public void s( ){ synchronized(Foo.class);// class literal(类名称字面常量)
}
}
方法1和2产生效果一样。它们的锁是:调用该方法对象所属的那个类
二:volatile
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值
============多线程抢占原理还没总结,再续
转载于:https://blog.51cto.com/3387980/779689