23. 锁的等级:方法锁、对象锁、类锁

2016/10/1 11:58 上午 posted in  Java comments

synchornized锁的对象可以是方法、对象、和类。

比如

class Test {
    public int share;
    public static share2;
    
    synchronized public void getShare(){
        
        Thread.sleep(5000);
        
        return share;
    }
    
    synchronized public void getShare2(){
        
        Thread.sleep(5000);
        
        return share;
    }
    
    public void print(){
        
        System.out.println("print test");
    }
    
    static public void print(String ok){
        
        System.out.println("print test : " + ok);
    }
}

如果对Test的实例上锁,那么其它的线程就无法访问该实例的synchronized方法,但是可以访问该实例没有synchronized的方法和静态的方法。
如果该方法内部调用了wait()方法,那么其它的线程可以访问该对象的synchronized方法。

如果对Test这个类上锁,那么该类的静态方法不能被其它的线程访问。但是实例方法可以被访问到,如果该实例为被上锁的话。