java中锁的四种状态
文章目录 前言 叙述 Synchronized volatile 锁的状态 锁是存在哪里的呢? 四种状态 锁状态转换过程 锁的优缺点 参考文章 小结 前言 在多线程并发编程中Synchronized一直是元老级角色,很多人都会称它为重量级锁,但是随着 Java SE1.6 对 Synchronized 进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了 Java SE1.6 中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。 叙述 首先我们以一张思维导图大概的了解一下锁状态,接下来将进行具体的阐述。 Synchronized synchronized,所谓的重量级锁。Java中每一个对象都可以作为一个锁,表现为: 对于普通方法的同步,锁是当前实例对象。 对于静态方法的同步,锁是当前类的Class对象。 对于同步方法块,锁是Synchronized括号里配置的对象。 JVM基于进入和退出Monitor对象来实现方法同步和代码同步。方法同步是使用monitorenter和monitorexit指令实现的,monitorenter指令是在编译后插入到同步代码块开始的位置,monitorexit是插在方法结束处和异常处。 volatile volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的可见性