本帖最后由 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循环,不就运行了四次吗?
|