Public synchronized void methodAAA()
{
//….
}
这也就是同步方法,那这时synchronized锁定的是哪个对象呢?它锁定的是调用这个同步方法对象。也就是 说,当一个对象P1在不同的线程中执行这个同步方法时,它们之间会形成互斥,达到同步的效果。但是这个对象所属的Class所产生的另一对象P2却可以任 意调用这个被加了synchronized关键字的方法。
上边的示例代码等同于如下代码:
public void methodAAA()
{
synchronized (this) // (1)
{
//…..
}
}
getX()获得的锁是实例对象的锁,而static synchronized 修饰的sayHello3()方法的锁,是该类的字节码,一个类的字节码只有一个,但是实例对象却有多个。所以对于对于不同的实例对象,多线程的sayHello3方法是同步的;但是getX()方法,对于多线程的不同对象,不能实现同步。
这个地方讲的同步很不错:http://www.blogjava.net/MEYE/articles/355593.html。 |