一个应该出错,但却没有出错的程序,大家来看一下..........
一个老师用来说明Synchronized作用的程序:十个人向一个帐户存700万次钱,最后帐户应该为多少?
因为没有Synchronized,所以我觉得应该是大于7000万的,但是我在我的电脑上运行却是正好...
奇怪......如果要加Synchronized,加在哪里呢?
public class SynchronizedDemo{
public static void main(String arg[]){
MyThread employee[]=new MyThread[10];
BankAccount CorpAccount=new BankAccount(0L);
for(int i=0;i<10;i++){
employee[i]=new MyThread(CorpAccount);
}
for(int i=0;i<10;i++){employee[i].start();}
waitloop:
while(true){
for(int i=0;i<10;i++)
if(employee[i].isAlive()) continue waitloop;
break;
}
System.out.println(CorpAccount.publicAccount);
}
}
class MyThread extends Thread{
BankAccount LocalAccount;
public MyThread(BankAccount b){LocalAccount=b;}
public void run(){
for(int i=0;i<7000000;i++){
LocalAccount.publicAccount+=10;
}
}
}
class BankAccount{
long publicAccount=0;
public BankAccount(long value){publicAccount=value;}
}