多线程:三大不安全案例

package com.wuming.syn;
//不安全的取钱
//两个人去银行取钱,账户
public class UnSafeBank {public static void main(String[] args) {//账户Account account = new Account(100,"结婚基金");Drawing you = new Drawing(account,50,"你");Drawing girlFriend = new Drawing(account,100,"girlFriend");you.start();girlFriend.start();}}
//账户
class Account{int money;//余额String name;//卡名public Account(int money, String name) {this.money = money;this.name = name;}
}//银行,模拟取款
class Drawing extends Thread{Account account;//账户//取了多少钱int drawingMoney;//现在手里有多少钱int nowMoney;public Drawing(Account account, int drawingMoney, String name) {super(name);//线程namethis.account = account;this.drawingMoney = drawingMoney;this.nowMoney = nowMoney;}
//取钱@Overridepublic void run() {//判断有没有钱if(account.money-drawingMoney<0){System.out.println(Thread.currentThread().getName()+"钱不够,取不了");return;}//卡内余额=余额-你取的钱account.money=account.money-drawingMoney;//你手里的钱nowMoney=nowMoney+drawingMoney;System.out.println(account.name+"余额为:"+account.money);//Thread.currentThread().getName()=this.getName();System.out.println(this.getName()+"手里的钱"+nowMoney);}
}

结婚基金余额为:50
你手里的钱50
girlFriend钱不够,取不了

=================

模拟延时

package com.wuming.syn;
//不安全的取钱
//两个人去银行取钱,账户
public class UnSafeBank {public static void main(String[] args) {//账户Account account = new Account(100,"结婚基金");Drawing you = new Drawing(account,50,"你");Drawing girlFriend = new Drawing(account,100,"girlFriend");you.start();girlFriend.start();}}
//账户
class Account{int money;//余额String name;//卡名public Account(int money, String name) {this.money = money;this.name = name;}
}//银行,模拟取款
class Drawing extends Thread{Account account;//账户//取了多少钱int drawingMoney;//现在手里有多少钱int nowMoney;public Drawing(Account account, int drawingMoney, String name) {super(name);//线程namethis.account = account;this.drawingMoney = drawingMoney;this.nowMoney = nowMoney;}
//取钱@Overridepublic void run() {//判断有没有钱if(account.money-drawingMoney<0){System.out.println(Thread.currentThread().getName()+"钱不够,取不了");return;}//sleep可以放大问题的发生性try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}//卡内余额=余额-你取的钱account.money=account.money-drawingMoney;//你手里的钱nowMoney=nowMoney+drawingMoney;System.out.println(account.name+"余额为:"+account.money);//Thread.currentThread().getName()=this.getName();System.out.println(this.getName()+"手里的钱"+nowMoney);}
}

结婚基金余额为:0
girlFriend手里的钱100
结婚基金余额为:-50
你手里的钱50

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

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

相关文章

C语言 printf 函数 - C语言零基础入门教程

目录 一.printf 函数简介二.C 语言格式符/占位符三.printf 函数实战四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 printf 函数是 C 语言标准库函数和 Python 内置函数类似&#xff0c;主要用于将格式化后的字符串输出到终端的屏幕&#xff08…

深入浅出大数据:到底什么是Hadoop?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;小枣君来源&#xff1a;鲜枣课堂1998年9月4日&#xff0c;Google公司在美国硅谷成立。正如大家所知&#xff0c;它是一家做搜索引擎起家的公司。无独有偶&#xff0c;一位名叫Doug Cutting的美国工程师&#xff0c…

Arraylist线程不安全原因

package com.wuming.syn;import java.util.ArrayList; import java.util.List;//线程不安全的集合 public class UnsafeList {public static void main(String[] args) {List<String> listnew ArrayList<String>();for (int i 0; i < 10000; i) {new Thread(()…

趣挨踢 | 30 个让程序员崩溃的瞬间,笑死我了!

戳蓝字“CSDN云计算”关注我们哦&#xff01;文章来自&#xff1a;程序员最幽默前方高能&#xff0c;看完不笑的来找我。我自己看了好几遍&#xff0c;程序员真的是一群逗比的人才&#xff01;1. 公司实习生找 Bug2. 在调试时&#xff0c;将断点设置在错误的位置3. 当我有一个很…

C语言 strlen 函数 - C语言零基础入门教程

目录 一.strlen 函数简介二.strlen 函数实战三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.strlen 函数简介 在C 语言中&#xff0c;char 字符串也是一种非常重要的数据类型&#xff0c;我们可以使用 strlen 函数获取字符串长度&#xff1…

同步方法及同步代码块

synchronized方法和synchronized块 synchronized方法必须获得对象的锁才能执行&#xff0c;否则线程阻塞&#xff0c;方法一旦执行&#xff0c;就独占此锁&#xff0c;直到方法返回才释放锁&#xff0c;后面被阻塞的线程才能获得这个锁&#xff0c;继续执行 synchronized会影…

“史上最强春节档”来袭!数据解读值得看的影片是......

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者介绍&#xff1a;徐麟&#xff0c;目前就职于互联网公司数据部&#xff0c;哥大统计数据狗&#xff0c;从事数据挖掘&分析工作&#xff0c;喜欢用R&Python玩一些不一样的数据个人公众号&#xff1a;数据森麟&#xff08…

C语言 sizeof 函数 - C语言零基础入门教程

目录 一.sizeof 函数简介二.sizeof 函数实战三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.sizeof 函数简介 在 C 语言中&#xff0c;char 字符串也是一种非常重要的数据类型&#xff0c;我们除了使用 strlen 函数获取字符串长度之外&…

多线程:CopyOnWriteArrayList

package com.wuming.syn;import java.util.concurrent.CopyOnWriteArrayList;//测试JUC安全类型的集合 public class TestCallable {public static void main(String[] args) {CopyOnWriteArrayList<String> list new CopyOnWriteArrayList<String>();for (int i …

大厂必问的分布式究竟是什么鬼?

戳蓝字“CSDN云计算”关注我们哦&#xff01;新的一年又开始了&#xff0c;各大招聘咨询机构都会对过去一年市场上的人才供需进行盘点。根据高端招聘平台100 offer发布的Java人才盘点报告&#xff0c;在过去的2018年&#xff0c;Java仍然是最流行、招聘供需量最大的技术语言。在…

死锁详细讲解

多个线程占有自己资源还想占用其他线程的资源导致两个或以上线程停止运行的情况 某一个同步块同时拥有“两个以上对象的锁”时可能发生死锁 死锁四个必要条件&#xff1a; 一&#xff1a; a资源只能被一个进程使用 二&#xff1a; 一个进程阻塞时拥有的a资源不释放 三&…

C语言 strcpy 函数 - C语言零基础入门教程

目录 一.strcpy 函数简介二.strcpy 函数实战 1.strcpy 函数简单使用2.strcpy 函数拷贝内容以’\0’结尾3.strcpy 函数注意崩溃问题 三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.strcpy 函数简介 C 语言在 string.h 中strcpy函数,可用完成…

为什么不用原生Spring-Cloud-Config

戳蓝字“CSDN云计算”关注我们哦&#xff01;引言近几年传统应用架构已经逐渐朝着微服务架构演进。那么随着业务的发展&#xff0c;微服务越来越庞大&#xff0c;此时服务配置的管理变得会复杂起来。为了方便服务配置文件统一管理&#xff0c;实时更新&#xff0c;配置中心应运…

cesium实现区域贴图及加载多个gif动图

1、cesium加载多个gif动图 Cesium的Billboard支持单帧纹理贴图&#xff0c;如果能够将gif动图进行解析&#xff0c;获得时间序列对应的每帧图片&#xff0c;然后按照时间序列动态更新Billboard的纹理&#xff0c;即可实现动图纹理效果。为此也找到了相对于好一点的第三方库libg…

C语言 strcpy_s 函数 - C语言零基础入门教程

目录 一.strcpy 函数简介二.strcpy 函数实战 1.strcpy 函数简单使用2.strcpy 函数拷贝内容以’\0’结尾3.strcpy 函数注意崩溃问题 三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.strcpy 函数简介 C 语言在 string.h 中strcpy函数,可用完成…

Lock锁详细讲解

package com.wuming.thread;import java.util.concurrent.locks.ReentrantLock;//测试Lock锁 public class TestLock {public static void main(String[] args) {TestLock2 testLock2 new TestLock2();//多个对象操作同一个资源票&#xff0c;不用lock时线程不安全/* 1089765…

DevOps“兵器”60样,你都会使哪几样?

戳蓝字“CSDN云计算”关注我们哦&#xff01;编前按&#xff1a;获得开发者社区支持的自动化&#xff0c;开源的工具是大家梦寐以求的。这里列举了 60 多款最棒的开源工具&#xff0c;可以帮助你很好的实行 DevOps。一、开发工具版本控制&协作开发1.版本控制系统 GitGit是一…

synchronized和lock

区别&#xff1a; lock手动开启和关闭锁&#xff0c;synchronized出了作用域自动释放 lock只要代码块锁&#xff0c;synchronized有方法锁和代码块锁 lock锁jvm花费较少的时间调度线程&#xff0c;性能更好&#xff0c;更好的扩展性&#xff08;提供更多的子类&#xff09; …

C语言 memcpy 函数 - C语言零基础入门教程

目录 一.memcpy 函数简介二.memcpy 函数实战 1.memcpy 函数简单使用2.strcpy 函数属于字符串拷贝3.memcpy 函数属于内存拷贝4.memcpy 函数注意崩溃问题 三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.memcpy 函数简介 C 语言在 string.h 中…

云漫圈 | 腾讯面试,我竟然输给了final关键字

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;乔戈里来源&#xff1a;程序员乔戈里腾讯面试现场——————final 在 Java 中是一个保留的关键字&#xff0c;可以声明变量、方法、类。什么是final变量 / 类 / 方法&#xff1f;任何变量前被 final 修饰就是 fin…