日期:2014-05-20  浏览次数:20685 次

多线程中+=与+的问题
本帖最后由 s517387735 于 2013-08-28 22:10:16 编辑
public class BankDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Cus c=new Cus();
Thread t1 = new Thread(c);
Thread t2 = new Thread(c);
t1.start();
t2.start();
}

}
class Bank
{
private int sum;
public void add(int n)
{
sum=sum+n;
System.out.println("sum="+sum);
}
}
class Cus implements Runnable
{
private Bank b=new Bank();
public void run()
{
for(int i=0;i<3;i++)
{
b.add(100);
}
}
}

把sum=sum+n;改为sum+=n;运行结果完全不同,求高手解释一下
(程序暂时没有考虑同步问题)
多线程

------解决方案--------------------
不一样,那是偶然吧,我第一次运行是一样,第二次又不一样,你多试几次,多线程本来就是这样的,有不确定的结果,结果不确定这种情况很常见!
------解决方案--------------------
同意,我的也都是
sum=100
sum=200
sum=300
sum=400
sum=500
sum=600
------解决方案--------------------
sum=sum+n;
sum+=n;

后者比前者速度要快。原因是第一个先计算  sum+n 然后再将这个值赋值给sum.
后者则是直接在sum+n;值就保存在sum上,无需再赋值。

影响线程输出结果的原因,除了CPU本身的机制外,程序也是有一定的影响的。