为什么bank对象的状态没有被改变?
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
new Thread(p).start()
这句话表示开启一个线程,你在这个线程里对Bank对象进行修改。但是在你修改前,你的
System.out.println(bank)
语句已经执行了,所以你输出的是未修改的Bank数据你有两种改法:
第一种是使用join等待线程执行完毕
第二种是简单粗暴的使用sleep等待