首页 新闻 赞助 找找看

有关volatile使用synchronized加锁的问题

0
[已解决问题] 解决于 2018-07-19 10:14

public class VolatileInc implements Runnable{

private static volatile int count = 0;//使用volatile修饰基本数据不能保证原子性

public void run() {
for(int i=0;i<10000;i++){
count++;
}
}
public static void main(String[] args) {
VolatileInc inc = new VolatileInc();
Thread t1 = new Thread(inc,"Thread A");
Thread t2 = new Thread(inc,"Thread B");
t1.start();
t2.start();
for(int i=0;i<10000;i++){
count++;
}

System.out.println("最终count>>>"+count);

}
}

各位大神,以上这段代码我在哪个地方加synchronized锁可以使得最终count为30000,怎么个执行过程

奋斗的Rookie的主页 奋斗的Rookie | 菜鸟二级 | 园豆:202
提问于:2018-07-18 18:25
< >
分享
最佳答案
0

弄个count++相关的方法  在方法里面加锁  不直接修改count的值 通过这个相关方法来修改 不就能保障最终为3000了

奖励园豆:5
前行丶 | 菜鸟二级 |园豆:219 | 2018-07-19 09:56

谢了,这样试了下果然可以

奋斗的Rookie | 园豆:202 (菜鸟二级) | 2018-07-19 10:12
其他回答(1)
0

你这个代码不满足啊~~你循环最大值是10000~即便是只有一个线程~也会达到10000 啊~ 

队长给我球。 | 园豆:324 (菜鸟二级) | 2018-07-19 10:07

失误了,不好意思,想要得到最终count应该是30000的。

支持(0) 反对(0) 奋斗的Rookie | 园豆:202 (菜鸟二级) | 2018-07-19 10:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册