线程同步的学习

文章目录

  • 一、同步代码块
  • 二、同步方法
    • 静态同步方法
  • 三、Lock

解决线程安全问题的三种方案:同步代码块、同步方法、使用 Lock

一、同步代码块

synchronized(同步锁对象) { 
需要同步操作的代码
}

注:
1.锁对象可以是任意对象
2.必须保证多个线程使用同一个锁对象

问:为什么随便放个对象,就可以锁住代码块呢?什么原理?

二、同步方法

public synchronized void method() {
可能会产生线程安全问题的代码
}

注:同步方法默认使用当前对象作为锁对象,也就是当前方法的所属实例对象,即 this

静态同步方法

public static synchronized void method() {
可能会产生线程安全问题的代码
}

注:锁对象是当前类的 Class 对象。

三、Lock

Lock 是一个接口,其中有两个抽象方法:

public abstract void lock(); // 获取锁
public abstract void unlock(); // 释放锁

在存在线程安全问题的代码所在类中,声明定义一个成员变量,变量存放接口 Lock 实现类对象的内存地址,如下所示:

Lock lock = new ReentrantLock(); // ReentrantLock 是接口 Lock 的实现类

然后在存在线程安全问题的代码执行前加锁

lock.lock();

代码执行结束后,释放锁:

lock.unlock();

建议:将 lock.unlock() 放在 finally {} 语句块中,无论是否出现异常都会释放锁

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

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

相关文章

spock测试_用于混合Spock 1.x和JUnit 5测试的Maven项目设置

spock测试我为Maven创建了一个示例Groovy项目,该项目在一个项目中混合了Spock测试和JUnit 5测试。 在下一节中,我将描述如何设置这种Maven项目。 在项目中启用Groovy 首先,您必须在项目中启用Groovy。 一种可能性是将GMavenPlus插件添加到您…

python 图片识别_python识别图片文字

滑稽研究所python识别图片文字哈喽,大家好呀,我是滑稽君。大家在写论文时可能经常碰到无法复制文字的文章。明明找到了需要的内容却无法直接复制使用,这让我们十分苦恼。那么本期滑稽君就告诉大家如何使用python识别图片中的文字。滑稽君整理…

MySQL数据库的数据类型decimal详解

大概意思是这样的: decimal(m,d) m是数字的最大位数,他的范围是从1-65; d是小数点后的位数,他的范围是0-30,并且不能大于m。 如果m被省略了,那么m的值默认为10, 如果d被省略了,那么d…

如何撰写论文

【0】README 0.1)本内容转自一个学长的口述,该学长在硕士期间发表论文6篇,现在 某高校读博; 0.2)鉴于看的人比较多,于今日对文本进行排版便于各位阅读(timestamp: 1512141116)&…

java查找链表中间元素_如何通过Java单次查找链表的中间元素

java查找链表中间元素您如何一次找到LinkedList的中间元素是一个编程问题,在电话采访中经常问Java和非Java程序员。 这个问题类似于检查回文或 计算阶乘 ,有时Interviewer还会要求编写代码。 为了回答这个问题,候选人必须熟悉LinkedList的数…

python nums函数获取结果记录集有多少行记录_PHP mysqli_num_rows():获取查询结果的行数...

在 PHP 中,想要获取由 SELECT 语句查询到的结果集中有多少条数据的话,则需要使用 mysqli_num_rows() 函数来实现。首先我们来看一下该函数的语法结构:面向对象风格的写法$mysqli_result -> num_rows;其中 $mysqli_result 为使用 mysqli_qu…

Windows系统下,好用的录屏软件工具/屏幕录制工具

文章目录万兴神剪手Open Broadcaster Software(OBS)QQ录屏Window 10 自带的屏幕录制软件录屏王bandicam万兴神剪手 可以录制网络视频、视频教程、游戏指南、演示文稿等。除了一些需要调用显卡的游戏,游戏窗口画面都能录制。神剪手的后期剪辑…

What are definitions of ​Model, Inference and Algorithm and its associations ?

【1】拿初中的二元一次方程来说明: 1.1)说model就好比一元二次方程,它是个方程模型;1.2)再说inference是求解该方程的某种方法——加减消元法(重在推理);1.3)最后说algo…

aws ec2 选择可用区_AWS Messaging Services:选择合适的服务

aws ec2 选择可用区1. AWS消息服务 AWS Messaging服务使云中相似和不同的软件系统能够异步通信和交换信息。 这些软件系统可能不兼容且使用不同的语言,也可能在不同的平台上。 AWS消息传递服务具有高度可用性,高度可扩展性和高度可靠性。 AWS支持针对不同…

qq消息连发代码_我们用的QQ是怎样实现通讯的

聊天工具便利了我们的生活,我们经常使用的QQ怎样实现通讯的呢?首先我们需要知道网络里的两种协议,两种通讯协议分别为UDP和TCP通常网络之间的通讯都是由这两个协议支持的,这两种协议属于传输层,它可以传输文件。UDP&am…

产品经理十大悲催错误

文章目录错误1: 将用户需求混淆为产品需求错误2: 将老板的需求混淆为产品需求错误3:将发明(invention)混淆为创造(innovation)错误4: 以自己的需求取代用户的需求错误5: …

cognito_将Spring Boot应用程序与Amazon Cognito集成

cognito在本文中,我们将展示如何使用Spring Security 5.0中引入的OAuth 2.0客户端库 ,在Spring Boot应用程序中为身份验证用户使用Amazon Cognito服务。 什么是AWS Cognito? Amazon Cognito是由AWS提供的服务,除了提供支持访问AW…

how to build a paper's architecture?

【0】README 0.1) these contents below are from PhD Hongjun Wang on ML class in #9133. best regards! 0.2) these contents below are just for reference. 【1】related to build a paper’s architecture 1.1) problem? what’s…

python之路 mysql 博客园_Python之路(二十七):Mysql(下)

本结目录数据库操作数据表操作外键约束多表查询索引事务python连接Mysql数据库操作此操作针对windows环境下该操作再Mysql服务器启动以及客户端连接之后对数据库操作之前,引申一些较为听的懂的白话1、显示数据库show databases; --后面记得跟英文字符的分号show cre…

APP视觉稿该怎么切图和标注

本篇教程跟大家分享UI设计的一些知识,就是APP怎么切图和标注,还不懂的同学,赶紧了解一下。 首先:哪些东西要切出来? 简单来说就是代码不好实现的东西就直接切成一张图放到软件里面展示,例如图片&#xff…

skynet.fork_Apache Ant 1.10.6发布–用于junitlauncher的fork模式以及新的jmod和链接任务

skynet.forkApache Ant 1.10.6已于本周发布。 此版本包含许多错误修复以及一些非常令人兴奋的新功能。 完整的发行说明可在此处获得 ,下载本身也可以在此处获得 。 在本文中,我将介绍该版本中引入的一些新功能。 使用junitlauncher任务在派生的JVM中运行…

使用MRUnit,Mockito和PowerMock进行Hadoop MapReduce作业的单元测试

0、preliminary 环境搭建 Setup development environment Download the latest version of MRUnit jar from Apache website: https://repository.apache.org/content/repositories/releases/org/apache/mrunit/mrunit/. For example if you are using the Hadoop version 1.…

python奇偶求和_python 判断奇偶并求和,运行过程有错误,希望高手给指导一下。...

问题是:b) Add to the condition in the while loop so that it will stop if either the user inputs a zero or the sum is larger than limit (if limit is None then ignore the second stopping condition). Do not use a break statement to implement this f…

产品经理如何进行需求管理?

文章目录交付需求第一步:提交需求1、流程图2、结构图3、原型图4、产品需求文档第二步:需求评审制定需求实施计划1、和研发确定开发计划2、和设计人员确定UI设计计划3、和运营人员确定运营计划管控需求变更1、分析需求2、分析变更的可行性3、 变更需求需求…

sap wad_使用网真和WAD热部署Kubernetes

sap wad在Kubernetes环境中测试企业应用程序时,更改,重新打包和重新部署应用程序的周转率可能会很高。 网真旨在通过将本地运行的进程代理到我们的Kubernetes集群中来缓解这种情况,就像本地进程是集群的一部分一样。 如果我们将这种方法与诸如…