问:该程序是否有安全问题,如果有,如何解决?
执行结果。看起来没问题。我是多核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线程才能执行此方法。
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!