开发者社区> 问答> 正文

多线程基础问题,谁能在不改代码结构的基础上让控制台输出1000?

这是别人问我的问题,他意思是一个公共资源1000,一个线程加800,一个线程减800,然后希望输出1000,结果不是1000,我加了个Thread.sleep(1)让两个线程都执行完,他不满意啊,你们有什么办法没?他意思是加同步什么的!代码:

 
package test;
 
public class ThreadSyn {
    /**
     * 一个人卡上有1000元 另外个人往这个人账户存800  另外这个人给另外个人汇款800 按道理应该还是是1000,用线程模拟 
     * @param args
     */
    static int balance = 1000;
    public static int operBalance(int ttl,int amt,int flag){
        if(flag==0){
            ttl = ttl+amt;
        }else if(flag==1){
            ttl = ttl-amt;
        }
        return ttl;
    }
    public static void main(String[] args){
        new Thread(new Runnable(){
            @Override
            public void run() {
                balance = operBalance(balance,800,0);
            }
        }).start();
         
        new Thread(new Runnable(){
            @Override
            public void run() {
                balance = operBalance(balance,800,1);
            }
        }).start();
         
//      try {
//          Thread.sleep(1);
//      } catch (InterruptedException e) {
//          e.printStackTrace();
//      }
        System.out.println(balance);
    }
 
}
 

展开
收起
爵霸 2016-06-02 13:11:10 1910 0
1 条回答
写回答
取消 提交回答
  • 在operBAn在operBalance方法上加synchronized关键字就可以了。保证这个方法被一个线程执行的时候,另一个线程需要等待执行完成后才能执行。

    2019-07-17 19:24:38
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
多IO线程优化版 立即下载
DTS控制台一本通 立即下载
不止代码 立即下载