当你把整个函数标记为“同步”(而不是函数中的一段代码)时,
你不能给定这次“同步”发生在哪一个对象锁上;
因为那样的说明在Java语法中是非法的。
整个函数的同步,是发生在this对象锁上的,但是
若是一个静态方法,则发生在类对象本身。

解决方案 »

  1.   

    当你同步一个方法的时候, 比如:public class A
    {
    synchronized method()
    {
    }
    }你不需要指出执行该同步方法所需拥有的对象锁,如:synchronized {this} method()
    {
    }这样写是非法的,JVM会默认将 this object作为同步的对象锁。
    如果该方法是静态的, 则默认同步锁为该类对象, 而不是 this.(注意:类对象对于某个类来说,只有一个)。