第 5-5 课:线程安全——synchronized 和 ReentrantLock + 面试题

前面我们介绍了很多关于多线程的内容,在多线程中有一个很重要的课题需要我们攻克,那就是线程安全问题。线程安全问题指的是在多线程中,各线程之间因为同时操作所产生的数据污染或其他非预期的程序运行结果。

线程安全

1)非线程安全事例

比如 A 和 B 同时给 C 转账的问题,假设 C 原本余额有 100 元,A 给 C 转账 100 元,正在转的途中,此时 B 也给 C 转了 100 元,这个时候 A 先给 C 转账成功,余额变成了 200 元,但 B 事先查询 C 的余额是 100 元,转账成功之后也是 200 元。当 A 和 B 都给 C 转账完成之后,余额还是 200 元,而非预期的 300 元,这就是典型的线程安全的问题。

enter image description here

2)非线程安全代码示例

上面的内容没看明白没关系,下面来看非线程安全的具体代码:

class ThreadSafeTest {static int number = 0;public static void main(String[] args) throws InterruptedException {Thread thread1 = new Thread(() -> addNumber());Thread thread2 = new Thread(() -> addNumber());thread1.start();thread2.start();thread1.join();

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

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

相关文章

MFC中的几个常用类——CFileDialog

2019独角兽企业重金招聘Python工程师标准>>> 1 简介 CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。 可以用 构造函数提供的方式使用CFileDialog,也可以从CFileDi…

数组中的filter方法_数组filter()方法以及JavaScript中的示例

数组中的filter方法JavaScript filter()方法 (JavaScript filter() method) filter() method is used to returns an array with the values which pass the given test (condition). filter()方法用于返回具有通过给定测试(条件)的值的数组。 Syntax: 句法: arra…

Oracle内置角色connect与resource的权限

首先用一个命令赋予user用户connect角色和resource角色: grant connect,resource to user; 运行成功后用户包括的权限: CONNECT角色: --是授予最终用户的典型权利,最基本的 ALTER SESSION --修改会话 CREATE CLUSTER --建立聚簇 CREATE DATAB…

第 5-7 课:Java 中的各种锁和 CAS + 面试题

如果说快速理解多线程有什么捷径的话,那本文介绍的各种锁无疑是其中之一,它不但为我们开发多线程程序提供理论支持,还是面试中经常被问到的核心面试题之一。因此下面就让我们一起深入地学习一下这些锁吧。 乐观锁和悲观锁 悲观锁和乐观锁并不是某个具体的“锁”而是一种并…

Exchange Server2010部署完后的配置:CA、Outlook Anywhere、OWA域名简写

Exchange Server 2010邮件系统安装完成后,必须经过相应的配置后,才能使Exchange Server 2010邮件系统提供基本的访问、邮件收发等基本功能。下面我们逐一看看如何让Exchanger Server跑起来。Exchange Server2010产品授权:我们目前所安装的Exc…

STM32——PID恒温控制

原理 元件 stm32f103核心板、L298N模块(当然用MOS管更好)、led一个、NPN三极管一个、蜂鸣器一个、DHT11一个、LCD1602一个、电阻200欧两个、可调电阻10K一个、加热丝一个 功能描述 用DHT11检测当前环境温湿度,并将数据显示在LCD1602上,在用设定温度与当…

第 6-2 课:SpringMVC 核心 + 面试题

Spring MVC 介绍 Spring MVC(Spring Web MVC)是 Spring Framework 提供的 Web 组件,它的实现基于 MVC 的设计模式:Controller(控制层)、Model(模型层)、View(视图层),提供了前端路由映射、视图解析等功能,让 Java Web 开发变得更加简单,也属于 Java 开发中必须要…

Python | 查找字符串中每个字符的频率

Given a string and we have to find the frequency of each character of the string in Python. 给定一个字符串,我们必须在Python中查找该字符串的每个字符的频率。 Example: 例: Input: "hello"Output:{o: 1, h: 1, e: 1, l: 2}Python c…

Lync2013 升级错误总结8 Lync2013 日志总是提示进程 RtcHost(5724) 收到了一个无效的客户端证书...

错误提示:解决方法:1打开注册表引导到:HKLM\System\CurrentControlSet\Control\SecurityProviders\Schannel2 新建一个DWORD键值:值的名称:EnableSessionTicket3 右键这个值点编辑讲数值数据修改成:24 重新…

简易的遍历文件加密解密

功能描述 将生成的可执行程序放在指定的文件夹内,双击后将该目录下所有文件包括子文件夹内文件全部加密,再次双击运行后将进行解密。 加密解密实现 主要运用了异或与取反操作,异或:两个值不同为1,相同为0。取反就是将该…

oracle 查看用户、权限、角色

查看用户、权限、角色的命令和视图1.查看所有用户: select * from dba_users; select * from all_users; select * from user_users; 2.查看用户系统权限: select * from dba_sys_privs; select * from session_privs; select * from user_sys_privs; 3.…

Java StackTraceElement getClassName()方法与示例

StackTraceElement类的getClassName()方法 (StackTraceElement Class getClassName() method) getClassName() method is available in java.lang package. getClassName()方法在java.lang包中可用。 getClassName() method is used to retrieve the fully qualified name of t…

django post and get?

GET是通过URL传给服务器的,POST是通过HTTP头传给服务器的,post的数据是不跟在请求的url后,而是在http头中,get是在url中 post的安全性比get高,因为有的服务器会缓存get数据,post数据不会被缓存,而且当你再次…

操作系统 测试题

一、单选 1、下面哪项不是常用调度算法 A、FCFS B、SJF C、HRN D、ABC 2、响应比的计算方法是 A、(作业等待时间作业执行时间)/作业执行时间 B、(作业等待时间作业执行时间)/作业等待时间 C、(作业等待时间&#xf…

安卓手机使用linux(含图形界面)——Aid Learning

以前再安卓手机上使用linux系统都是使用Termux,安装上很麻烦,而且还是黑乎乎的窗口,没有图形界面,对于初学linux者来说并不友好,而Aid Learning就更人性化了,他是一种模拟的linux,其安装十分简易&#xff0…

第 6-1 课:Spring 核心 + 面试题

Spring Framework 简称 Spring,是 Java 开发中最常用的框架,地位仅次于 Java API,就连近几年比较流行的微服务框架 SpringBoot,也是基于 Spring 实现的,SpringBoot 的诞生是为了让开发者更方便地使用 Spring,因此 Spring 在 Java 体系中的地位可谓首屈一指。当然,如果想…

Java SecurityManager getThreadGroup()方法与示例

SecurityManager类的getThreadGroup()方法 (SecurityManager Class getThreadGroup() method) getThreadGroup() method is available in java.lang package. getThreadGroup()方法在java.lang包中可用。 getThreadGroup() method is used to return the thread group into whi…

通知主线程刷新

dispatch_async(dispatch_get_main_queue(), ^{ //回调或者说是通知主线程刷新转载于:https://www.cnblogs.com/ejllen/p/4153118.html

简易花式流水灯

先看看效果 具体思路 实现流水灯的效果其实就是控制相应的I/O口,以P2为例,通过有规律的改变P2各I/O口的状态就可实现相应规律的流水灯效果,这其中需要用到与、或、异或、左移、右移等操作。   流水灯向左闪烁点亮就是将P2最低位的1不断左移…

数据库 范式

关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。数据库的设计范式是数据库设计所需要满足的规范。只有理解数据库的设计范式,才能设计出高效率、优雅的数据库,否则可能会设计出错误的数据库.目前,主要有六种范式&…