• 技术文章 >java >java基础

    synchronized在java中的原理分析

    小妮浅浅小妮浅浅2021-01-09 11:38:00原创2270

    之前讲了一些synchronized的用法,那么对于这些使用的产生,我们要从synchronized的原理中去寻找。就synchronized的使用而言,分为底层原理、同步原理和可重入原理。我们需要在其中分析出synchronized一些锁作用的机制,这里以JVM为切入点,为大家展开其原理的解析。

    1.底层原理

    对于原理,最好的方式就是深入到JVM中去。我们可以编译看看其字节码文件,再来分析,因此在这里举一个最简单的例子。

    public class SynTest11 {
        private Object object = new Object();
        public void test() {
            synchronized(object){
                System.out.println("java的架构师技术栈");
            }
        }
        
    }

    2.同步原理

    数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而j.u.c.Lock给出的答案是在硬件层面依赖特殊的CPU指令。

    当一个线程访问同步代码块时,首先是需要得到锁才能执行同步代码,当退出或者抛出异常时必须要释放锁,那么它是如何来实现这个机制的呢?我们先看一段简单的代码:

    package com.paddx.test.concurrent;
    public class SynchronizedDemo {
        public void method() {
            synchronized (this) {
                System.out.println("Method 1 start");
            }
        }
    }

    3.可重入原理

    在之前曾提到可重入的性质,那么synchronized关键字是如何保证的呢?其是工作是由我们的jvm来完成的,线程第一次给对象加锁的时候,计数为1,以后这个线程再次获取锁的时候,计数会依次增加。同理,任务离开的时候,相应的计数器也会减少。

    以上就是synchronized在java中的原理分析,我们可以看出synchronized的使用离不开JVM的配合。理解了本篇synchronized的原理后,在使用时也会更加得心应手。

    专题推荐:java synchronized原理
    上一篇:synchronized在java中的修饰 下一篇:synchronized在java的优缺点

    相关文章推荐

    • java volatile的特性是什么• synchronized在java中的修饰

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网