java 线程安全list_JAVA并发编程实战-线程安全性

线程安全性:

对象的状态是指存储在状态变量(例如实例和静态域)中的数据。

对象的状态可能包括其他依赖对象的域。

例如:某个HashMap的状态不仅存储在HashMap对象本身,还存储在许多Map.Entry对象中。

“共享”意味变量可以由多个线程同时访问,而“可变”则意味变量的值在其生命周期内可以发生变化。

一个对象的是否需要是线程安全的,取决于它是否被多个线程访问。要使得线程是安全的,就需要采用同步机制来协同对对象可变专业状态的访问。

Java 中的主要同步机制是关键字synchronized,它提供了一种独占的加锁方式,还有volatile类型的变量,显式锁、原子变量。

当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么这个类就是线程安全的

无状态的对象一定是线程安全的

49cf22da103324e6c1c44f2f92369f4b.png

内置锁

Java提供了一种内置的锁机制来支持锁机制:同步代码块(一个作为锁的对象引用+一个作为由这个锁保护的代码块)。以synchronized修饰的方法就只一种横跨整个方法体的同步代码块,其中该同步代码块的锁就是方法调用所在的对象。

每个java对象都可以用做一个实现同步的锁:内置锁。线程在进入同步代码块之前会自动获得锁,并且在退出同步代码块的时候释放锁,不论正常退出还是抛出异常退出,获得内置锁的唯一路径就是进入由这个锁保护的同步代码块或者方法。

java的内置锁相当于一个互斥锁,这意味着最多只有一个线程能够持有这种锁,当线程A尝试获取一个由线程B持有的锁时,线程A必须等待或者阻塞,直到B释放这个锁,如果B不释放,那么A永远等下去。

由于每次只能有一个线程执行内置锁保护的代码块,因此,由这个锁保护的同步代码块会以原子方式执行,多个线程在执行该代码块时也不会相互干扰。

重入

当某个线程请求一个由其他线程持有的锁时,发出请求线程的就会阻塞,然而,由于内置锁是可重入的,因此如果某个线程试图获得一个已经由它自己持有的锁,那么这个请求就会成功。“重入”意味着获取锁的操作的粒度是“线程”,而不是“调用”。重入的一种是实现方法是,为每个锁关联一个获取计数值和一个所有者线程,当计数值为0时,这个锁就被认为是没有被任何线程持有,当线程请求一个未被持有的锁时,JVM将记下锁的持有者,并且将获取计数值置为1.如果同一个线程再次获取这个锁,计数值将递增,而当线程退出同步代码块时,计数器会相应的递减,当为0时候,这个锁将被释放

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

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

相关文章

日文转换为罗马音_手把手教你掌握韩语40音!入门必备哦

其实学习韩语还是蛮简单的,平时看韩剧也能学会几句比较常用的话~那么接下来我们进入正题,首先你可以根据自己的韩语学习经验和全网搜集,整理出以下能够快速学习韩语40音的方法,希望能帮助到更多面对韩语40音迷茫无措的…

win7一直显示正在启动_win7系统中提高启动速度并且禁用某些软件启动的操作小技巧...

我们在启动系统时,会出现启动速度过慢,甚至达到假死机状态,就是鼠标一直在转圈圈的等待状态。出现这个问题,一般是我们电脑中自启动的软件过多造成的,解决这个问题我们只要进入系统配置工具中,对系统进行相…

站怎么点都是一样_抖音怎么做?这几样一样都不能少,你都做到了吗?

有人说去年是内容爆发年,也有人说今年是内容元年,其实不管哪年都好,反正电商平台是越来越倾向于内容化运营,包括618都对入场商家的内容化运营有要求,特别是短视频内容。下面就给大家分享一下如何去做好一个抖音账号。分…

只能获取fixed语句初始值_因用了Insert into select语句,美女同事被开除了!

点击上方 web项目开发,选择 设为星标优质文章,及时送达--Insert into select请慎用。这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份。本想通过程序先查询查出来然后批量插入。但xxx觉得这样有点慢,需要耗费大量的网…

mybatis依赖_这大概就是公司一直用Mybatis的原因!真的太强了

01 什么是MyBatis、Spring?MyBatis是什么?它是一个SQL Mapping框架,它是一个持久化技术框架。再说得简单一点,它只不过是一个操作数据库的框架。Spring是什么?Spring就是一个大容器,不管是IoC还是AOP&#…

php excelreader 中文,如何解决php excel reader导出excel中文乱码?

解决php excel reader导出excel中文乱码的方法:1、如果不使用dump函数,可以通过修改【_defaultEncoding】变量解决问题;2、如果使用dump函数导出excel,需要修改htmlentities函数解决。解决php excel reader导出excel中文乱码的方法…

python画同心圆程序_Python Turtle:使用circle()方法绘制同心圆

I am not at this point interested in an efficient way of producing concentric circles: I want to see what I have to do to get this way to work 为了解决OP的问题,对其原始代码进行更改以使其正常工作是很简单的:turtle_pos(trl, [trl.xcor() …

绕过宝塔禁止的php函数,宝塔disable functions函数全被禁命令执行+加域服务器如何无限制执行命令...

本地搭建实验环境时遇到了不少小问题实验环境2008 R2宝塔搭建的IIS discuz3.2X手动上传shell冰蝎连接(ps:有表哥使用冰蝎的时候提示文件存在但是无法获取密钥,解决办法,使用最新版本的冰蝎即可,具体详情看更新日志)连接上shell发现无法执行命…

anaconda和python区别_初学 Python 者自学 Anaconda 的正确姿势是什么?

事实上Anaconda 和 Jupyter notebook已成为数据分析的标准环境。 简单来说,Anaconda是包管理器和环境管理器,Jupyter notebook 可以将数据分析的代码、图像和文档全部组合到一个web文档中。 接下来我详细介绍下Anaconda,并在最后给出Jupyter …

oracle 24756,关于ORA-24756: transaction does not exist的问题

最近在检查一个数据库时,发现跟踪日志有大量的错误( ORA-24756: transaction does not exist)1、主机系统环境IBM P740#oslevel -s6100-06-05-11152、数据库版本11.2.0.3 RAC ASM两节点3、在数据库跟踪日志中出现大量错误。(alert文件太大无法上传,几乎…

python 函数 全局变量_python3函数内全局变量使用global

原博文 2017-08-16 23:08 −def p_num(): global num num 10 print (num) num 5 p_num() print(num) ... 相关推荐 2019-12-11 15:55 − 如果需要在函数内部改变函数外部的变量,就可以通过在函数内部声明变量为global变量。这样当程序运行至global变量便会替换外部…

java 切面_Java笔试面试精心整理得到89道Spring 核心知识【收藏向】

点击上方"蓝字",关注了解更多Spring Framework 简称 Spring,是 Java 开发中最常用的框架,地位仅次于 Java API,就连近几年比较流行的微服务框架 SpringBoot,也是基于 Spring 实现的,SpringBoot 的…

经济学原理 下载 曼昆_2021南开经济学考研全年规划

先介绍一下本文的作者,本人本科来自于某双非财经类院校,于2019年考入南开大学某应用经济学专业,在2019年考研初始专业课826经济学基础(也就是20年的823)中拿到了138分的成绩,自认为对专业课的复习有一定心得…

excel中如何对矩阵得对角线进行求和_如何利用图卷积网络进行图形深度学习(第2部分)...

图上的机器学习是一项艰巨的任务,由于高度复杂但信息量丰富,本文是关于如何利用图卷积网络(GCN)进行深度学习的系列文章中的第二篇。我将简要回顾一下上一篇文章:图形卷积网络的高级介绍具有谱图卷积的半监督学习(本文)简要回顾一下在上一篇关…

linux 开放5222端口,ejabberd 安装配置

ejabberdejabberd是基于Jabber/XMPP协议的即时通讯服务器,由GPLv2授权(免费和开放源码),采用Erlang/OTP开发。它的特点是,跨平台,容错,集群和模块化。ejabberd安装:1. 下载安装包:2.给权限&…

docker查找镜像_5 款非常好用的开源 Docker 工具,get一波~

本文同步Java知音社区,专注于Java作者:Shekhar Gulatihttp://dzone.com/articles/5-docker-utilities-you-should-know导读Docker 社区已经创建了许多开源工具,它们能帮我们处理各种用例。作者在本文中推荐了 5 款认为最有用的 Docker 工具&a…

else应输入一个语句是什么意思_Python学习基础篇 -4: Python中的转弯---分支语句

前言:本专栏以Python为主题,并尽可能保持每星期两到三更,直到将Python的基础知识浅析和讲解完毕,同时,有一定基础的同学可以移步 Python实战专栏 。背景:对于该系列文章的前三篇,自己读过的同学…

ofdm原理_OFDM技术简介

今日光电有趣、有料、有深度光电技术及科技资讯分享让整个世界变得温暖,他人因你的分享而变好!欢迎分享有价值的东西!今日光电因你而变,欢迎留言、分享...我们一起用科技光耀世界、温暖人间……OFDM技术作为4/5G物理层重要技术之一…

linux 内核被污染,导致Linux 4.20性能下降的STIBP已被Kernel 4.19系列内核移除

因为Linux Kernel 4.20默认启用了Spectre补丁STIBP,所以导致性能的下降,下降幅度甚至达到了50%,目前STIBP已经被移除,在最新发布的Linux Kernel 4.19.4、4.14.83内核当中已经移除了STIBP补丁。据称Linux Kernel 4.20就是启用了Spe…

a*算法matlab代码_NSGAII多目标优化算法讲解(附MATLAB代码)

小编今天为大家讲解NSGA-II多目标优化算法,提到多目标优化,大家可能第一个就想到NSGA-II算法,今天小编就带领大家解开NSGA-II的神秘面纱。NSGA-II全称是快速非支配排序遗传算法,这个算法的精髓体现在“快速非支配排序”这7个字上&…