usuallyUnusual 2011-09-06 09:29
浏览 143
已采纳

朋友们,帮我看看这段简单的程序,为什么会出现我说的问题啊?

public class SaveGetMoney implements Runnable{

private static int deposit = 10000;
private byte  flag;
private int dynamicMoney;

public SaveGetMoney(byte flag,int dynamicMoney) {
    super();
    this.flag = flag;
    this.dynamicMoney = dynamicMoney;
}
public void save(int saveCount){
    deposit = deposit + saveCount;
    System.out.println("public void save");
}
public void get(int getCount){
    deposit = deposit - getCount;
    System.out.println("public void get");
}

@Override
public void run() {
    if(flag == 1){
        System.out.println(Thread.currentThread().getName()+" savesavesave: "+deposit);
        save(dynamicMoney);
        System.out.println("当前执行了: "+Thread.currentThread().getName()+"去save了: "+dynamicMoney);
    }
    else if(flag == 0){
        System.out.println(Thread.currentThread().getName()+" getgetget: "+deposit);
        get(dynamicMoney);
        System.out.println("当前执行了: "+Thread.currentThread().getName()+"去get了: "+dynamicMoney);
    }

}

public static void main(String[] args) {
    System.out.println("刚开始的static的deposit: "+deposit);
    new Thread(new SaveGetMoney((byte)1,1000)).start();
    new Thread(new SaveGetMoney((byte)1,500)).start();
    System.out.println("当前执行了: "+Thread.currentThread().getName()+": "+deposit);
}

}
得到的结果为:
刚开始的static的deposit: 10000
Thread-0 savesavesave: 10000
public void save
当前执行了: Thread-0去save了: 1000
当前执行了: main: 10000
Thread-1 savesavesave: 11000
public void save
当前执行了: Thread-1去save了: 500

问题在于:“当前执行了: main: 10000” 这个是为什么啊?我觉得应该是11000啊,不对吗?

展开全部

  • 写回答

10条回答 默认 最新

  • DreamZhong 2011-09-06 09:55
    关注

    那是因为你现在线程数少,线程执行时间短,如果你在第二个线程中加上一段短时间的休眠就会看到你想要的结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部