多线程(四):银行存钱


prtyaa
prtyaa 2023-12-28 17:05:33 51704 赞同 0 反对 0
分类: 资源
有两个人存钱,每人每次存100元,每人存3次

问:该程序是否有安全问题,如果有,如何解决?

执行结果。看起来没问题。我是多核CPU可能造成的是运算了没打印,100,下来是300,200在后面。这是有可能的。多核CPU的问题。

下来找一下问题;

1...明确哪些代码是多线程运行代码

2...明确共享数据

3...明确多线程运行代码中,哪些语句是操作共享数据的

看 1 首先run肯定是多线程运行代码,其次run里调用了add. 所以add也是多线程执行代码

看 2 共享数据是sum,还有Bank对象

看 3 run方法里是共享数据,但是就一行代码,这行代码是调用了add方法,所以往add方法里看,有两条语句,一条是计算sum,一条是打印sum。所以共享数据是add方法里的内容

 

给add方法中sum = sum+n后面加一行代码睡一会

然后测试类不变,运行结果是:

这显然是出问题了。

处理代码为:

然后运行

好了。

这个也可以直接加在for循环外边,run方法里面这个位置加锁,但是有个什么缺点。就是A进来存3次,一共存了300后,B才能存钱。这样不符合现实生活。

然后再看一下,synchronized关键字可以放到函数上,意思就是这是一个同步的函数,0线程执行完了此函数后,1线程才能执行此方法。

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL2
粉丝 1 资源 1949 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  126
统信桌面专业版【全盘安装UOS系统】介绍  121
银河麒麟桌面操作系统安装佳能打印机驱动方法  114
银河麒麟桌面操作系统 V10-SP1用户密码修改  105
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益209.03元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!