class test{
public static final Object objLock;
function f1(){
    int n = 0 ;
    synchronized(objLock){ //见好多代码这么写
       n = n + 1; 
    }
}function f2(){
    int n = 0 ;
    synchronized(this){
       n = n + 1; 
    }
}function f3(){
    int n = 0 ;
    synchronized(test.class){
       n = n + 1; 
    }
}
}

解决方案 »

  1.   

    1。
    得到对象objLock的锁
    如果得不到即其他线程正在使用objLock,那么synchronized中的代码就不能运行
    2。得到调运f2方法的对象的锁
    如果得不到,那么synchronized中的代码就不能运行
    3。没见过 
      

  2.   

    答:锁的来源不同。
    1)表示:当得到了objLock的锁,才能。
    2)表示:当得到了对象自已的锁,才能。
    3)表示:当得到了自己对象的类锁,才能。
      

  3.   

    云端解释的很好。 MARK 学习。
      

  4.   

    答:每一个对象,都有一个所属的类(设对象test所属的类为:TestClass)。对于这个类本息,如何描述它的信息呢?(如:它定义了哪些数据成员,哪些方法成员等等),那么:java.lang.Class类就是用于此目的的。那么:test.class就是表示了一个java.lang.Class类的对象,该对象描述了TestClass中情况。所有的TestClass类的对象,都共用同一个test.class。因此,类锁即指这个java.lang.Class类的对象锁
    以上仅供你参考