一: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(类名称字面常量)

 }

}

方法12产生效果一样。它们的锁是:调用该方法对象所属的那个类

二:volatile

Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值

 

============多线程抢占原理还没总结,再续