一个应该出错,但却没有出错的程序,大家来看一下..........
一个老师用来说明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;}
}
因为没有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;}
}
...全文
相关推荐
VC++ MFC MDI 多窗口出错问题程序
在你的问题中,"VC++ MFC MDI 多窗口出错问题程序"描述了一个典型的问题,即当用户在未关闭所有子窗口的情况下操作,应用程序会出错并终止。MDI出错的常见原因有以下几点:1.
C# WinForm 判断程序是否已经在运行,且只允许运行一个实例,附
我们开发WinFrom程序,很多时候都希望程序只有一个实例在运行,避免运行多个同样的程序,一是没有意义,二是容易出错。为了更便于使用,笔者整理了一段自己用的代码,可以判断程序是否在运行,只运行一个实例
假出错-易语言
然而,无论编程语言如何易用,如何有效地处理程序中可能发生的错误,始终是衡量程序员专业水平的一个重要标准。"假出错"这一概念,从字面理解似乎是程序中出现错误的某种模拟或仿真。
打印代码及出错抓图
例如,可能在某一点上,一个变量的值没有被正确地初始化,或者某个条件判断出错,导致了后续的错误。通过逐步打印关键位置的代码,我们可以逐步排查问题。"
对话矿关闭后出错
描述中的“这只是一个临时文件,对大家没有什么用的”,暗示了问题可能源于一个临时文件。在计算机系统中,临时文件是程序运行过程中创建的,用于存储中间结果或设置。


