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本身的机制外,程序也是有一定的影响的。