03 synchronized
synchronized
1、 锁机制的特性
- 互斥性:在同一时间只允许一个线程持有某个对象锁(原子性)
- 可见性:必须确保在锁被释放之前,对共享变量所在的修改,对于随后获得该锁的另一个线程是可见的
2、synchronized的使用
2.1 锁的分类
- 对象锁:synchronized(this|object) 修饰非静态方法
每个对象都会有一个monitor对象,这个对象就是java对象的锁
类的对象可以有多个,所以每个对象有其独立的对象锁,互不干扰 类锁:synchronized(类.class) 修饰静态方法
类锁实际上是通过对象锁实现的,即类的class对象锁
每个类只有一个Class对象,所以每个类只有一个类锁2.2 锁的原理(monitor)

- 代码块加锁是通过monitorenter和monitorExist配合使用实现
方法的加锁通过表示为ACC_SYNCHRONIZED实现
2.3 java虚拟机对synchronized的优化
一个对象实例包含:对象头、实例变量、填充数据
对象头中包含了锁的标志位信息:


- 当其他线程竞争失败后,不要马上转换锁的级别,而是执行空循环(自旋锁)
- 锁排除:JIT在编译的时候把不必要的锁去掉
03 synchronized的更多相关文章
- java的同步方法和同步代码块,对象锁,类锁区别
/** * @author admin * @date 2018/1/12 9:48 * 作用在同一个实例对象上讨论 * synchronized同步方法的测试 * 两个线程,一个线程调用synchr ...
- Android中measure过程、WRAP_CONTENT详解以及 xml布局文件解析流程浅析
转自:http://www.uml.org.cn/mobiledev/201211221.asp 今天,我着重讲解下如下三个内容: measure过程 WRAP_CONTENT.MATCH_PAREN ...
- [03] 线程同步 synchronized
1.线程同步概述 线程之间有可能共享一些资源,比如内存.文件.数据库等.多个线程同时读写同一份共享资源时,就可能引起冲突,所以引入了线程的"同步"机制. 所谓同步,就是说线程要有先 ...
- Java并发基础03. 传统线程互斥技术—synchronized
在多个线程同时操作相同资源的时候,就会遇到并发的问题,如银行转账啊.售票系统啊等.为了避免这些问题的出现,我们可以使用synchronized关键字来解决,下面针对synchronized常见的用法做 ...
- Java多线程系列--“JUC锁”03之 公平锁(一)
概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...
- iOS 线程安全之@synchronized的用法
@synchronized(self)的用法: @synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改.这个是objective-c的一个锁定令牌,防止self ...
- java多线程系列之 synchronized
一.synchronized基本原理 java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁.线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁. ...
- Java多线程系列--“基础篇”04之 synchronized关键字
概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchro ...
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
概要 Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答.本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start( ...
随机推荐
- neo4j图形数据库Java应用
CREATE (陈冠希:明星 {名称: "陈冠希"}), (王菲:明星 {名称: "王菲"}), (李亚鹏:明星 {名称: "李亚鹏"}), ...
- Linux性能优化从入门到实战:16 文件系统篇:总结磁盘I/O指标/工具、问题定位和调优
(1)磁盘 I/O 性能指标 文件系统和磁盘 I/O 指标对应的工具 文件系统和磁盘 I/O 工具对应的指标 (2)磁盘 I/O 问题定位分析思路 (3)I/O 性能优化思路 Step 1:首先采用 ...
- koa2 进阶网站
http://www.ruanyifeng.com/blog/2017/08/koa.html 阮一峰 https://www.itying.com/koa/ koa2中文网 https://blo ...
- 多线程、同步实现方法及Error和Exception的区别与联系
多线程.同步实现方法? 实现线程有两种方法: 继承Thread类 实现Runnable接口 实现同步也有两种方法 一种是用同步方法:同步方法就是在方法返回类型后面加上synchronized, 比如: ...
- CGfsb
这里补充一下%n是代表向参数赋值打印的字符个数 例如printf("AAAA%n",&a); 代表的是向a写入4 printf("AAAA%1n", & ...
- Test 3.27 T1 立方体大作战
Description 一个叫做立方体大作战的游戏风靡整个 Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规则:给定玩家一个有 2n 个元素的栈,元素一个叠一个地放置.这些元 ...
- Linux内核设计与实现 总结笔记(第五章)系统调用
系统调用 内核提供了用户进程和内核交互的接口,使得应用程序可以受限制的访问硬件设备. 提供这些接口主要是为了保证系统稳定可靠,避免应用程序恣意妄行. 一.内核通信 系统调用在用户空间进程和硬件设备之间 ...
- web页面上传大文件有没有好的解决方案
本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...
- 四-3、Mirror(镜像)、Spin(旋转)、创建组
1.Mirror 1.针对单个器件 2.针对整个模块 2.Spin(旋转)(平时用的比较少) 3.创建组(经常用到)(主要是在布局时,发现后期需要移动整个模组)(创建为group) 1.创建组---- ...
- 【Java】commons-lang3中DateUtils类方法介绍
添加commons-lang3的Maven依赖 <dependency> <groupId>org.apache.commons</groupId> <art ...