ZPY博客

Java多线程总结之(二)同步与对象锁

Synchronized方法和synchronized(this)都是锁定的对象,所谓对象,并不是类,而是new出来的实例,如果我分别new两个对象,这时调用这两个对象里的synchronized方法也是异步访问的。

 

Java中也支持将“任意对象”作为“对象监视器”来实现同步功能。也就是synchronized(非this对象x)。锁非this对象具有一定的优点:如果在一个类中有很多个synchronized方法,这时虽然能实现同步,但会受到阻塞,所以影响运行效率;但如果使用同步代码块锁非this对象,则synchronized(非this)代码块中的程序与同步方法是异步的,不与其它锁this同步方法争抢this锁,则可大大提高运行效率。

 

需要注意的是,使用synchronized(非this对象x)同步代码块进行同步操作时,对象监视器必须是同一个对象。如果不是同一个对象监视器,运行的结果就会是异步。

 

另外,如果synchronized关键字加在static方法上,是给Class类加锁,而加上非static方法是给对象加锁。