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

  • A+
所属分类: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方法是给对象加锁。

ZPY

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: