用多线程实现线程安全的取款

Posted 编程学与思

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用多线程实现线程安全的取款相关的知识,希望对你有一定的参考价值。



用多线程实现线程安全的取款

鸡汤常讲人要学会失去,遗憾才是完整,伤害是成长最宝贵的一课……那是因为我们别无选择。已经发生的一切,如果不给它一个温暖的意义,你又能怎样?强装欢笑的大人不必嘲讽痛哭的小孩不懂事,当我们一起对流星许愿时,都只祈祷健康快乐应有尽有。我祝愿你学会接受,也祝愿这项技能,永远没有用武之地。 by 八月长安

用多线程实现线程安全的取款


用多线程实现线程安全的取款

题目:小红和小明共同一个银行账户,账户中有1000元,他们每个人每次取100元,一共取10次。

   分析:在这个问题中,我们将用到多线程和同步代码块的知识,首先我们能看出,这个问题是两个人同时对一个数据进行操作

用多线程实现线程安全的取款

接下来我们思考如何同时操作那就意味着两个程序同时运行,也就意味着需要用多线程,本次我们将使用继承Thread的方式用多线程实现线程安全的取款

现在我们开始填写这个类中的内容,我们把这个线程看做是一个人,那么人在run()方法中将做什么事情?那就是取钱(方法)取几次那?我们定义去10次,根据这个逻辑我们开始定义我们去钱的方法。

那么在这个方法中,我们再去思考:我们要取钱,那么我们势必要先传入一个账户,返回先判断这个账户的余额,当余额满足要求是我们开始对这个账户余额进行修改,所以我们要调用它的setter和getter方法(重点:切记是对传入的账户的值进行修改)用多线程实现线程安全的取款

由于我们刚才提到了账户对象,所以我们对它进行创建,如下图用多线程实现线程安全的取款

最终我们在Test类中运行

用多线程实现线程安全的取款

将不同的线程的名称重新定义,然后调用start方法运行结果如下完成题目要求

关于上述同步代码块,要说的是,哪里对共有数据操作哪里就用锁封装起来,无论如何我们加同步代码块的目的就得为了让 可能同步操作的数据在被操作的那一刻,明确,只能被一个线程调用,这个才是同步代码块的核心,如果不加就会出现负数的问题。





以上是关于用多线程实现线程安全的取款的主要内容,如果未能解决你的问题,请参考以下文章

JAVA多线程用实现Runnable接口的方式创建线程

怎么实现springMVC 多线程并发

多线程的安全隐患

多线程的前世今生

MySQL的Buffer Pool线程安全吗?

GIL 线程池