多线程并发-synchronized
来源:互联网 发布:nba总决赛数据2016 编辑:程序博客网 时间:2024/05/22 00:45
同步方式
- synchronized同步方式主要有3种,简单介绍如下:
1.1. synchronized同步普通方法,锁是当前对象实例。
1.2. synchronized同步静态方法,锁是当前类的Class对象。
1.3 synchronized同步代码块,锁是代码块中的括号里的对象。
同步原理
- synchronized在JVM中是使用Monitor对象来实现对方法和代码块的同步。只是各自实现原理不一样。
- 任何一个对象都会与monitor对象关联,线程获得Monitor对象,就获得该对象的锁。
- 对于同步代码块,JVM使用monitor的Monitorenter指令和monitorexit指令来实现同步代码块。
- mointorenter指令是在编译后进入到同步代码块开始位置,monitorexit是在同步代码块结束和异常位置。JVM保证这对指令必须成对出现。
轻量级锁
- 轻量级锁是JDK1.6之后加入的,轻量级锁是 相对于 使用操作系统互斥量来实现锁,这种方式成为重量级锁。
- 轻量级锁本意是在没有多线程前提下,减少传统重量级锁带来的性能消耗。这句话的意思应该是以前使用synchronized修饰方法时,底层使用重量级锁。即使某一段时间没有多线程访问。
- 对象头:在HotSpot虚拟机里面,每个java对象头都分为两部分,第一部分是存储对象自身运行时的数据,称之为Mark Word;第二部分是存储指向方法区对象类型的指针,如果是数组的话,还有一个额外的空间存储数组的长度。对象头中Mark Word存储内容如下:
- 轻量级锁获取流程:
- 轻量级锁依据:轻量级锁性能提升是一个经验数据,是没有多线程对锁竞争的条件下,没有竞争,轻量级锁使用CAS操作避免同步互斥开销。如果有多线程竞争,轻量级锁不仅仅要CAS操作还要使用互斥量,甚至比重量级锁更慢!
偏向锁
- 偏向锁是为了消除数据在没有多线程竞争的条件下,完全消除同步动作,进一步提供程序的运行性能。轻量级锁是在没有多线程竞争条件下,使用CAS消除使用操作系统互斥带来的影响。而偏向锁,不仅是为了消除同步动作,甚至连CAS操作都要取消。
- 偏向锁的设计主要是提高带有同步但是没有竞争的程序性能,即程序虽然使用同步方式,但是实际运行过程中并没有竞争情况发生。
- 偏向锁不是一直都是对程序有利的,如果程序中大多数锁都是多线程竞争,其实偏向锁是多余的。有的场景下,可以使用-XX:-UseBiasedLocking禁止使用偏向锁
阅读全文
0 0
- 多线程并发-synchronized
- Java synchronized关键字与多线程并发访问
- Java并发编程:synchronized多线程同步详解
- java多线程并发编程之一synchronized
- Java多线程/并发04、synchronized同步
- Java 多线程并发编程之 Synchronized 关键字
- Java 多线程并发编程之 Synchronized 关键字
- Java 多线程并发编程之 Synchronized 关键字
- 多线程并发编程(三):多线程同步互斥Synchronized
- ThreadLocal与synchronized多线程并发访问区别1【转】
- ThreadLocal与synchronized多线程并发访问区别2【转】
- 关于JAVA多线程并发synchronized的测试与合理使用
- 关于JAVA多线程并发synchronized的测试与合理使用
- 多线程并发 synchronized对象锁的控制与优化
- 关于JAVA多线程并发synchronized的测试与合理使用
- Java多线程与并发应用-(2)-线程互斥synchronized
- java多线程、并发系列之 (synchronized)同步与加锁机制
- 多线程并发 synchronized对象锁的控制与优化
- java打开浏览器访问网站
- Hanoi 多汉诺塔问题 (dp)
- iOS开发之代码规范小建议
- Linux终端类型
- 搭建SVN服务器详细教程
- 多线程并发-synchronized
- 项目:简单实现坦克大战
- 阿里云大数据三次技术突围:Greenplum、Hadoop和飞天
- ++i 和i++
- git-修改远程的URL
- C++11新特性学习笔记—noexcept关键字
- 活动安排问题-贪心算法
- 修复 Ubuntu 中“Unable to lock the administration directory (/var/lib/dpkg/)”
- 多线程CreateThread与_beginthreadex本质区别