美文网首页
synchronized 以及java内置锁

synchronized 以及java内置锁

作者: longtaiping | 来源:发表于2020-05-24 10:36 被阅读0次

Java中锁大致上分为两类:一类是显示锁,一类是隐式锁;今天我们重点来分析一下java中隐式锁的实现:

java中通过synchronized关键字类实现隐式锁:

首先synchronized这个关键字,我们的字节码文件在被翻译为机器语言的时候,这个关键字会直接在synchronized编译为队指令 monitorEnter ,monitorExit ,在这对指令之间的代码,cpu在处理时候,会要求所有访问这一段区域的线程,串行化执行。

synchronized的语义大致上就是上面的那张图片中所显示的:

在synchronized包裹的代码段中同一时间只能够有一个线程能够访问,其他的线程会在这个时候处于等待状态,知道直到上一个抢道资源的线程执行完毕,同时,在非同步块中的代码,访问时不受限制的。

需要注意的是synchronized 同步块的使用有多种方式:

1.实例方法级别的同步:这个时候被用来作为锁对象的是this对象,如果这个时候this是一个多例的话,jvm实际上在执行的时候不会这段代码加锁,这就是java内置锁的消除

3.类对象级别的锁:类对象有两种写法

锁对象的内存结构:

对象头:这里涉及到一个java内置锁对象的膨胀升级。

synchroized在使用的过程中不能够跨方法使用,我们有没有可能不是java的关键字来自己添加锁呢?

我们可以通过UnSafe 这个类来手动的添加锁和释放锁:

锁的粗化:

锁的消除:

java 内置锁的膨胀升级

相关文章

  • synchronized 以及java内置锁

    Java中锁大致上分为两类:一类是显示锁,一类是隐式锁;今天我们重点来分析一下java中隐式锁的实现: java中...

  • Synchronized和ReentrantLock

    Synchronized Synchronized也称内置锁,Java提供同步代码块这种内置的锁机制来支持原子性,...

  • Java中的锁:synchronized和Lock

    互斥锁synchronized synchronized是java语言内置功能,访问被synchronized关键...

  • Java中的锁——Lock和synchronized

    一、Lock接口 1、Lock接口和synchronized内置锁 a)synchronized:Java提供的内...

  • JUC(一) | 同步辅助类浅谈

    Java多线程环境中存在内置锁与同步锁,内置锁即由synchronized修饰的代码,借助于对象的内置锁实现,为重...

  • 加锁机制--线程安全性

    加锁机制:内置锁和重入 内置锁: java提供了一种内置的锁机制来支持原子性:同步代码块(Synchronized...

  • 对synchronized的一点理解

    定义 Java中具有通过synchronized实现的内置锁,内置锁获取锁和释放锁的过程是隐式的,进入synchr...

  • Java 多线程

    内置锁 Java提供了内置的锁机制来支持原子性:同步代码块(Synchronized Block)。同步代码块包括...

  • 锁 | 内置锁和手动锁的区别

    在Java中,常见的锁有二种:synchronized(内置锁)和ReentrantLock(手动锁,及可重入锁)...

  • Java的对象锁

    内置锁 Java提供了一种内置的锁机制来支持原子性和可见性:同步代码块(Synchronized Block)。同...

网友评论

      本文标题:synchronized 以及java内置锁

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