java synchronized 静态_Java之Synchronized修饰实例方法和静态方法

一、Synchronized修饰实例方法,实际上是对调用该方法的对象加锁,俗称“对象锁”

情况一:​同一个对象在两个线程中分别访问该对象的两个同步实例方法

结果:会产生互斥​

原因:因为锁针对的是对象,当对象调用​一个synchronized方法时,其他同步方法需要等待其执行结束并释放锁之后才能执行

例子:

a4c26d1e5885305701be709a3d33442f.pngsynchronized修饰实例方法情况一

​运行结果:(可能出现的情况)

1、Thread-0

得到锁​-->10s之后-->Thread-0

释放锁-->Thread-1

得到锁​-->Thread-1

释放锁​

2、Thread-1

得到锁​-->Thread-1

释放锁-->​​Thread-0

得到锁​-->10s之后-->Thread-0

释放锁

情况二:不同对象在两个线程中分别调用同一个​同步实例方法

结果:不会互斥

原因:因为是两个对象,锁针对的是对象,并不是方法,所以可以并发执行,不会互斥。

例子:

a4c26d1e5885305701be709a3d33442f.pngsynchronized修饰实例方法情况二

​运行结果:(可能出现的情况)

1、​Thread-0

得到锁​-->Thread-1

得到锁​-->Thread-1

释放锁​-->10s之后-->Thread-0释放锁

2、Thread-1 得到锁​-->Thread-1

释放锁-->​​Thread-0

得到锁​-->10s之后-->Thread-0

释放锁

3、​Thread-0

得到锁​-->Thread-1

得到锁-->​​Thread-1

释放锁​-->10s之后-->Thread-0

释放锁

4、​Thread-1

得到锁​-->Thread-0

得到锁-->​​Thread-1

释放锁​-->10s之后-->Thread-0

释放锁​

二、Synchronized修饰静态方法,实际上是对该类对象,俗称“类锁”​

情况一:用类直接在两个线程中调用两个不同的同步静态方法

结果:会产生互斥

原因:因为对静态方法加锁,实际上是对类加锁,类只有一个。因此当一个同步静态方法被访问时,该类已处于被锁状态。此时其他同步静态方法不能被访问​(未用Synchronized修饰的静态方法仍可以访问)

例子:

a4c26d1e5885305701be709a3d33442f.pngsynchronized修饰静态方法情况一

​运行结果:(可能出现的情况)

1、Thread-1 得到锁-->Thread-1

释放锁-->Thread-0

得到锁-->10s之后-->Thread-0 释放锁

2、​Thread-0

得到锁-->10s之后-->Thread-0

释放锁-->Thread-1 得到锁-->Thread-1释放锁

情况二:用一个类的静态对象在两个线程中调用同步静态方法

结果:会产生互斥

原因:与​​同一个对象在两个线程中分别访问该对象的两个同步实例方法情况相同。本质上还是对类的加锁

例子:

a4c26d1e5885305701be709a3d33442f.pngsynchronized修饰静态方法情况二

​运行结果:(可能出现的情况)

1、Thread-0 得到锁-->10s之后-->Thread-0

释放锁-->Thread-1 得到锁-->Thread-1 释放锁

2、​Thread-1

得到锁-->Thread-1 释放锁-->Thread-0

得到锁-->10s之后-->Thread-0 释放锁

​情况三:一个对象在两个线程中分别调用一个同步静态方法和一个同步实例方法

结果:不会产生互斥

原因:虽然是一个对象调用,但是两个方法的锁类型不同,调用静态方法实际上是对类对象在调用,而调用实例方法实际上是对实例对象在调用。因为这两个方法并不是一个对象锁,因为不会互斥,会并发执行

例子:

a4c26d1e5885305701be709a3d33442f.pngsynchronized修饰静态方法情况三

​运行结果:(可能出现的情况)

1、Thread-0 得到锁-->Thread-1

得到锁-->10s之后-->Thread-1

释放锁-->Thread-0 释放锁

2、Thread-0 得到锁-->Thread-1

得到锁-->10s之后-->Thread-0

释放锁-->Thread-1 释放锁​

3、Thread-1 得到锁-->Thread-0

得到锁-->10s之后-->Thread-0

释放锁-->Thread-1

释放锁​​

3、Thread-1 得到锁-->Thread-0

得到锁-->10s之后-->Thread-1

释放锁-->Thread-0释放锁​

​三、结论

​1、静态方法的锁和实例方法的锁,默认是不同的对象锁

2、静态方法加锁,能和该类中所有用synchronized修饰静态方法的相互互斥,和​未用synchronized修饰的静态方法不互斥

3、静态​方法锁实际是对类对象加锁,实例方法加锁实际是对实例对象加锁

四、参考文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站漏洞扫描工具_如何实现免费网站漏洞扫描?推荐一款神器给你

网站漏洞想必有网站的人都比较了解,想要了解网站漏洞,最好的办法就是给网站做一次漏洞扫描,网站漏扫产品比较多,费用也从几十/次到几千/次不等,但是对于我这种小企业来说,几千一次也是非常贵的,…

java mvc设计模式_JavaEE知识点:MVC设计模式

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及…

mysql 导出数据字典_操作MySQL?这个库比pymysql香一百倍

原创: 阿亮 Python极客社区操作MySQL,我们都习惯于用pymsq,基本流程就是创建连接创建游标执行SQL关闭连接代码是这样的import pymysql# 1.创建连接conn pymysql.connect(host127.0.0.1, port3306, userroot, passwordroot, charsetutf8)# 2.…

java putifabsent_java8中Map的一些骚操作总结

一 前言本篇内容是关于 map 新特性的一些方法使用上的介绍,如果有不足之处欢迎补充!!二 map新特性关于以下函数式编程的函数的计算知识追寻者都使用 简单字符串代替了,参数无非就是Key,value;2.1 forEachforEach迭代&a…

java 注解 target_详解JDK 5 Annotation 注解之@Target的用法

前言目前,越来越多的架构设计在使用注解,例如spring3.0、struts2等框架。让我们先来看看注解的定义。如下是一段使用了JDK 5 Annotation Target的代码:Target({ElementType.METHOD})Retention(RetentionPolicy.RUNTIME)InheritedDocumentedpu…

pajek软件使用方法_使用Jco远程连接SAP软件系统方法

作者:JongWill声明:本文章仅用于SAP软件的应用与学习,不代表SAP公司。(注:文中所示截图来源SAP软件,相应著作权归SAP所有。)SAP公司的ERP系统是一套成熟的套装软件,它是博大精深的,但也不是无所…

镜像浏览器_害怕win10镜像有第三方软件,直接到微软官网下载,原汁原味

很多时候我们在网上下载的一些win10镜像ISO文件都包含有一些第三方的软件,虽然这都是网站为了盈利而不得不做的,但是辛苦下载安装好的windows系统,如果有乱七八糟的软件心里真的会非常不舒服,甚至以前电脑城的win7所谓正版光碟都是…

post大小限制_作为一个程序员,面试中常问的get和post的区别,你真的知道吗

作为一个程序员无论是搞前端的还是搞后端的,只要问起来GET和POST的区别,都能说出来个一二三四来。你可能自己写过无数个GET和POST请求,或者也看过很多权威网站总结出来的区别,你非常清楚的知道什么时候用GET什么时候用POST.当你在…

java static 修饰变量吗_Java面试 - static 修饰的变量和方法有哪些特点?

1、static修饰的变量和方法,在类加载时即被初始化,可直接通过类名.变量名和类型.方法名进行调用。2、static修饰的变量,在类加载时会被分配到数据区的方法区。类的实例可共享方法区中的变量。如果static修饰的变量发生改变,那么所…

安卓手机如何防盗_如何设置安卓手机各版本USB调试模式

关注我们,获得更多资讯在这篇教学中,小蛙会详细向大家讲解USB调试模式的开启及关闭方法,以及其用途。在这个过程中,由于Android 机型众多,所以无办法列举太多。但请相信小蛙,开启USB 调试的操作方法基本上是…

iphone同步助手_iPhone 与安卓手机之间如何进行资料迁移

​上一期我们介绍了 iPhone 之间和安卓手机之间如何备份和进行资料迁移,很多朋友都留言说想知道 iPhone 与安卓手机之间如何进行资料迁移,看来双十一大家都剁手换了手机啊,嘴上说着不要,到头来还是管不住自己的手。同操作系统的手…

当前记录集不支持更新_不断中招的你还放心升级win10吗?wi10近期更新问题及解决办法...

.专于心 精于形.Win10用户升级5月更新后屏幕出现蓝绿伪影:或跟调节色温软件有关随着五月更新升级范围的扩大,一些问题也是加速展现在微软面前。现在,有不少Windows 10用户反馈称,自己升级至五月更新后,屏幕出现了蓝绿伪…

易班自动答题脚本_如何使用python进行自动网上考试

前言文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者: HIS HackerPS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun背景说明在github上发现一…

两个子集pom互相调用_声明式服务调用组件Feign

什么是Feign? Feign是SpringCloud组件中的一个轻量级RESTful的HTTP服务客户端。Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。什么是OpenFeign?OpenFeign是SpringCloud在Feign的基础上支持了SpringMVC的…

安卓手机主题软件_安卓手机安装不了软件原因和方法

安卓手机不能安装软件其实有很多的原因,排除可以避免的原因(google授权),其他的硬件设施的支持,也可能出现软件不能安装的现象。有的是可以解决的,但有的是强制性原因,那就没有办法了。下面就来分析下软件不能安装的几…

excel插入页码_Excel里毫不起眼的页眉页脚,居然有这3种高能用法!

点击上方蓝字关注星标★不迷路本文作者:小敏本文编辑:小叮一说到页眉页脚,你脑海中出现的,是不是这样一个画面?规规矩矩的页眉页脚,比如,公司 logo 或者文件名称放在页眉位置,底部加…

前端怎么获取cookie的值_京东购物小程序cookie方案实践(附Demo)

一、前言早期为了解决“会话保持”的需求,社区中出现了「cookie 方案」并最终成为 W3C 标准:当某个网站登录成功后,客户端(浏览器)收到一个 cookie 标识(文本)并保存下来,在后续请求中会自动带上这个字段,由此 Web 后台…

R 语言怎么保存工作目录到当前路径_【R语言基础】01.R语言软件环境搭建及常用操作...

一、R语言简介R语言是专业的统计分析软件,来自著名数据科学网站(http://www.kdnuggets.com/)发起的一个2019年统计分析和数据挖掘软件使用情况的调查结果:表明R语言是该领域近年来最受欢迎的软件之一。R语言的优势:(1)…

ssm java上传图片预览_ssm文件上传_上传图片

1、搭建好ssm框架2、导入文件上传所需依赖commons-fileuploadcommons-fileupload1.4commons-iocommons-io2.6commons-langcommons-lang2.63、springmvc的xml文件中配置文件所需的类4、jsp界面对应其次第二个文件上传对应的就是第二个div里面的内容4、form表单配置注意&#xff…

平台允许同时在线人数 显示_12万人同时在线,游戏未正式发售,国产“糖豆人”已诞生?...

《派对动物》目前在Steam平台上开启了试玩阶段,游戏离正式发行还有一段时间。这款游戏适合多人作战,正如它的名字一样《派对动物》。不过从游戏角色的形象设定上来看,有一些像学龄前儿童喜爱的动画片,因此并没有人给这部游戏太多的…