本帖最后由 jiangyutc 于 2014-2-21 00:07 编辑  
 
for(第一步执行(只有第一次执行,后面不再执行),第二步执行,第三步执行) 
{ 
第四第执行 
} 
 
 
 
 
 
 
for(第一步执行(只有第一次执行,后面不再执行),第二步执行,第四步执行) 
{ 
第三第执行 
} 
 
 
上面的两个for循环表达式哪个是真确的????- /*
 
 - 需求:储户,两个,每个都到银行存钱每次存100,,共存三次。
 
 - */
 
  
- class Bank
 
 - {
 
 -         private int sum;
 
 -         public synchronized void add(int num)//同步函数
 
 -         {
 
  
-                         sum = sum + num;
 
 -                         try{Thread.sleep(10);}catch(InterruptedException e){}
 
 -                         System.out.println("sum="+sum);
 
  
-         }
 
 - }
 
  
 
- class Cus implements Runnable
 
 - {
 
 -         private Bank b = new Bank();
 
 -         public void run()
 
 -         {
 
 -                 for(int x=0; x<3; x++)
 
 -                 {
 
 -                         try {
 
 -                                 Thread.sleep(100);
 
 -                         } catch (InterruptedException e) {                                
 
 -                                 e.printStackTrace();
 
 -                         }
 
 -                         b.add(100);
 
 -                 }
 
 -         }
 
 - }
 
  
 
- class BankDemo 
 
 - {
 
 -         public static void main(String[] args) 
 
 -         {
 
 -                 Cus c = new Cus();
 
 -                 Thread t1 = new Thread(c);
 
 -                 Thread t2 = new Thread(c);
 
 -                 t1.start();
 
 -                 t2.start();
 
 -         }
 
 - }
 
  复制代码 
 
如果第二个for是真确的 
为什么这里没发生线程安全问题呢 
比如有两个线程执行这个程序,for循环是按照第二种表达式运行 
假设x=2,一个线程获得执行权,进了for循环,没等x++,进去后sleep了,就失去了执行权 
然后第二个线程也进来执行代码了 
本来是运行三次的for循环,不就运行了四次吗? 
 
 |