synchronized method(){}            
表示锁住该类对象上的所有同步方法...static synchronized method(){}     
书上写的是"static methods can be synchronized, using the lock from the
java.lang.Class instance representing that class."我不明白这个什么意思...但是我知道这两个肯定锁的是不同对象...
谁能帮我解释一下?

解决方案 »

  1.   

    锁有俩种,对象锁和类锁,前者对应对象,每个对象都有一个锁,后者对应类,每个类只有一个锁
    对于非static方法,用synchronized是属于对象锁
    对于static方法,用synchronized是属于类锁
    对象锁我想你已经明白了
    对于类锁,如下(其实差不多,只是锁不同):class A
    {
       public static synchronized void f()
       {
       }   public static synchronized void g()
       {
       }
    }若某一线程取得了A类的锁,则其可以调用A.f()或A.g(),其他线程此时则不能调用这俩个方法,等待前面的线程释放锁
      

  2.   

    去看看代码块与类同步的概念。推荐你看看<<JAVA就业教程>>里面有解释
      

  3.   

        学习下~~2楼的意思,是不是某一线程一旦取得了A类的STATIC锁,则此线程就锁定了A这个类,其他线程不能使用A类的任何方法,包括一般的方法和带锁的方法;如果某线程取得是A类的一般锁,则其他线程只是不能调用A类被锁的方法,但是可以调用没带锁的方法~~请问是不是这样,但是我怎么感觉有点别扭呢,我怎么感觉加了STATIC只是说明这个方法是静态方法,可以直接调用而不用实例化,而并不表示锁定此方法就锁定了此对象呢~~~~
      

  4.   


    不是,非static的synchronized方法是属于对象锁,每个实例都有一个锁
    static的synchronized方法属于类锁,每个类只有一个锁这是属于不同的锁,如果你取得了A类的类锁,其他线程就不能调用A类的static的synchronized方法,其他方法不受影响
    如果你取得了某个实例a的锁,其他线程就不能调用a里的非static的synchronized方法,但是其他对象(如b)就不受影响,a里的其他方法也不受影响
      

  5.   

    基本明白了,自己再理解下~~Thank you!