为什么bank对象的状态没有被改变?

发布于 2022-09-12 03:13:58 字数 1521 浏览 37 评论 0

public class ThreadBySync {
    
            public static void main(String[] args) {
            
                Bank bank = new Bank("n1",100);
                Person p = new Person(bank);
                new Thread(p).start();
            
                System.out.println(bank);
                
            }
            
            
}


class Person implements Runnable{
    private Bank bank;
    
    public Person(Bank bank) {
        this.bank = bank;
    }
    
    public void run() {
        this.bank.withDraw(100);
    }
    
    
    
}

class Bank{
    
    private String name;
    private BigDecimal money;
    
    public Bank(String name,int money) {
        this.name = name;
        this.money = new BigDecimal(money);
    }
    
    public void deposit(int i) {
        BigDecimal tmp = new BigDecimal(i);
        this.money.add(tmp);
    }
    
    public void withDraw(int i ) {
        BigDecimal tmp = new BigDecimal(i);
        if(this.money.compareTo(tmp) >= 0) {
            this.money = this.money.add(new BigDecimal(-i));
        }
        
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public BigDecimal getMoney() {
        return money;
    }

    public void setMoney(BigDecimal money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Bank [name=" + name + ", money=" + money + "]";
    }
    
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

傲影 2022-09-19 03:13:58

new Thread(p).start()这句话表示开启一个线程,你在这个线程里对Bank对象进行修改。
但是在你修改前,你的System.out.println(bank)语句已经执行了,所以你输出的是未修改的Bank数据

你有两种改法:
第一种是使用join等待线程执行完毕

Thread thread = new Thread(p);
thread.start();
thread.join();

System.out.println(bank);

第二种是简单粗暴的使用sleep等待

new Thread(p).start();
//等待两秒
Thread.sleep(2000);
System.out.println(bank);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文