再谈synchronized
a. synchronized作用于方法,二种作用域情况:
1) synchronized 作用于类的对象实例的方法
一个对象中有多个synchronized方法时,当线程1已经访问了这个对象中的任何一个synchronized的方法,线程2不能访问这个对象的任何一个synchronized方法了。但是如果线程2访问的是这个类的另外一个对象中的synchronized方法的话是没有关系的。
2) synchronized 作用于类的方法
synchronized static aStaticMethod{}防止多个线程同时访问这个类中的synchronized static 方法。它可以对类的所有对象实例起作用。
b. synchronized 作用于代码块
synchronized(this){/*区块1*/}//它的作用域是当前对象;代码块在方法内,虽然这个方法不是synchronized,但是当线程1在访问这个块的时候,线程2就不能再访问这个对象中的其他的任何的synchronized方法和synchronized(this){/*区块1*/}的代码块。
Object ob1=”resource1”;
Object ob2=”resource2” ;
synchronized(ob1){/*区块2*/}//作用域为ob1,可以理解为 区块2被称ob1的lock锁住了。
synchronized(ob2){/*区块3*/}//作用域为ob2,可以理解为 区块3被称ob2的lock锁住了。