文档章节

synchronized 解析

 小小阿甘
发布于 01/07 17:02
字数 352
阅读 0
收藏 0

简述

synchronized:
- 可以保证变量的原子性,可见性和顺序性
- 可以保证方法或者代码块在运行时只有一个方法可以进入临界区获取资源
- 可以保证内存变量的内存可见性

原理

修饰方法

public synchronized void syncTask(){
  System.out.println("测试");
}

由字节码可以看出,JVM是通过编译之后的标志位ACC_SYNCHRONIZED来识别是否使用了synchronized

修饰静态方法

public static synchronized void syncTask(){
  System.out.println("测试");
}

你会发现字节码中除了多了一个标识ACC_STATIC,其余都与上一案例一致,当然结论也就是一致的了

修饰代码块

public void syncTask(){
 synchronized (this){
   System.out.println("测试");
 }
}

从字节码中可以获知,这种情况,synchronized的实现是基于进入和退出Monitor对象实现(monitorenter与monitorexit),其中monitorenter指令作用于同步代码块的开始位置,monitorexit指令作用于同步代码块结束的位置。任何一个对象都有一个Monitor与之相关联,当一个线程持有Minitor后,它将处于锁定状态。

© 著作权归作者所有

上一篇: CS6/CS5安装
下一篇: JVM 类加载机制
粉丝 4
博文 52
码字总数 18069
作品 0
南京
技术主管
私信 提问
Java SimpleDateFormat 非线程安全

多线程调用同一个SimpleDateFormat的parse方法,解析一个“正常”的日期字符串,频繁出现解析异常的情况。最终发现SimpleDateFormat是非线程安全的。以下是java docs中的说明: Synchronizat...

东临
2014/05/14
180
0
全面解析Synchronized

在多线程的环境下,经常存在线程安全问题,这种问题产生的原因在于:该是原子操作的代码段被其他的线程切割,从而引起的数据混乱问题。在本篇博客中将讲述如何使用synchronized关键字保证代码...

LoveOne
2015/12/07
181
0
死磕 java同步系列之ReentrantLock VS synchronized——结果可能跟你想的不一样

问题 (1)ReentrantLock有哪些优点? (2)ReentrantLock有哪些缺点? (3)ReentrantLock是否可以完全替代synchronized? 简介 synchronized是Java原生提供的用于在多线程环境中保证同步的...

彤哥读源码
06/11
2K
6
Java 并发编程源码解析汇总篇

java并发编程,内存模型 java并发编程,volatile内存实现和原理 Java并发编程,并发基础 Java 并发编程,线程池(ThreadPoolExecutor)源码解析 Java并发编程,Executor 框架介绍 Java并发编...

郑加威
2018/12/23
0
0
Druid 1.0.29 发布,阿里数据库连接池

这是一个很小修改的版本,主要是修复 SQL 语法解析的问题和支持 AliJDK WISP。 PG SQL语法解析增强,支持Order by Nulls LAST语法 #1637 修复对老版本Oracle驱动支持的问题 #1629 #1598 ODPS...

淡漠悠然
2017/03/17
3.6K
9

没有更多内容

加载失败,请刷新页面

加载更多

会用python把linux命令写一遍的人,进大厂有多容易?

看过这篇《2000字谏言,给那些想学Python的人,建议收藏后细看!》的读者应该都对一个命令有点印象吧?没错,就是 linux 中经常会用到的 ls 命令。 文章中我就提到如何提升自己的 python 能力...

上海小胖
16分钟前
3
0
HashMap的特性

一、hashmap数据结构:哈希表结构:数组+链表 hashmap调用默认构造方法会产生一个默认底层是长度为16的Entry数组,首先调用key的hasCode()方法来得到一个整数, int hash = hash(key.hashCode...

GGbird
16分钟前
14
0
第五章 spring-connet之Imports注解来龙去脉

前言 imports是一个在spring体系里非常重要的注解,基本每个Enable开头的注解必然有一个import注解。接下来我们深入研究下import的作用。看小节的同学建议先取看PostProcessorRegistrationDe...

鸟菜啊
19分钟前
2
0
CentOS部署Harbor镜像仓库

关于Harbor Harbor是用于存储和分发Docker镜像的镜像仓库服务,相比Docker Registry,Harbor在安全、标识、管理等方面做了增强,更适合企业使用; 官方网站:https://goharbor.io/ 官方开源:...

程序员欣宸
24分钟前
3
0
JavaScript调试必会的8个console方法

每个JavaScript开发者都用过console.log()来调试程序,但实际上Console对象还提供了很多其他方法可以提高调试效率。本文将介绍8个有趣的Console方法,即使JavaScript老手也不一定知道! 1、c...

汇智网教程
46分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部