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 @   伊文小哥  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示