美文网首页
Java synchronized的使用

Java synchronized的使用

作者: 薛定谔的猫QAQ | 来源:发表于2021-07-26 18:26 被阅读0次

    synchronized 是控制访问的情况下使用,说人话就是在多个线程在访问同一个对象所做的访问控制,大概说一下我了解的synchronized的使用和了解,有错误的描述,大家可以指出来,我及时修改
    synchronized是内置锁
    简单的使用,这是放在方法上的

    public synchronized void test() {
    }
    

    这是放在对象上的

    public Object object =new Object();
        public void test() {
            synchronized (object){
                
            }
        }
    

    第一段代码属于隐式写法,它的显式写法如下:

    public void test() {
            synchronized (this){
            }
        }
    

    其实上面3段代码,都是对象锁,且效果基本一致;这些锁也可以所用于List,String等类型防止并发访问修改导致的问题

    接下来讲讲在static作用下的

     public synchronized void test() {
        //这是属于对象锁
     }
     public synchronized static void test1() {
       //这是类锁,其实也是对象锁
     }
    

    这2段代码都是对象锁,为什么说synchronized 是类锁呢,其实就是偷个懒,因为相当于静态方法和成员方法,我只是不知道该怎么描述;虽然这两个都是对象锁,但是这两个锁持有的实例却不一样,因为静态相当于在JDK中有且仅有的一个,但是成员变量却不一样,可能描述的不对,大家懂那个意思就行

    分享一下单例写法
    懒汉式,安全写法,也是双重检查写法,这个也是属于类锁

    private static volatile Test instance = null;
    
        private static Test getInstance() {
            if (instance == null) {
                synchronized (Test.class) {
                    if (null == instance) {
                        instance = new Test();
                    }
                }
            }
            return instance;
        }
        private Test() {
        }
    

    相关文章

      网友评论

          本文标题:Java synchronized的使用

          本文链接:https://www.haomeiwen.com/subject/xiygmltx.html