synchronized 几种使用方式

同步方法

由于Java的每个对象都有一个内置锁,当 synchronized 关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态

public class Test{
    
    /**
    * 这种方式是 对象锁。普通实例方法默认同步监视器就是this,即调用该方法的对象
    */
    public synchronized void methodA(){
        
    }
    
    /**
    * 这中方式是 类锁。synchronized加锁的对象为当前静态方法所在类的Class对象
    */
    public synchronized static void methodB(){
        
    }
}

同步代码块

synchronized 关键字修饰的语句块会自动被加上内置锁,从而实现同步

public class Test{
    
    /**
    * 这种方式是 类锁
    */
    public void methodC(){
        synchronized(Test.class){
            
        }
    }
    
    /**
    * 这种方式是 对象锁。this表示是对象锁
    */
    public void methodD(){
        synchronized(this){
            
        }
    }
    
    /**
    * JVM全局常量锁。需要考虑在其它方法中互斥问题
    */
    public void methodE(String param){
        synchronized(param.intern()){
            
        }
    }
}

 

posted @ 2024-09-21 22:43  伊文小哥  阅读(12)  评论(0编辑  收藏  举报