关于Runnables实现多线程的问题

三棵树aa 2016-07-17 06:15:44
//两个储户往同一个账户存钱
public class ThreadAccount{
public static void main(String[] args) {
Customer a = new Customer(5,1000);
Thread customer1 = new Thread(a) ;
Thread customer2 = new Thread(a);
customer1.setName("储户一");
customer2.setName("储户二");
customer1.start();
customer2.start();
}
}
class Account{
private double instance;
void deposit(int time,double money ){
int i =0;
while (true) {
synchronized (this) {
if (i < time) {
instance += money;
System.out.println(Thread.currentThread().getName() + "存钱"
+ money + "\t余额:" + instance);
i++;
}
}
}
}

}
class Customer implements Runnable {
private int time;
private double money;
Account account =new Account(); 直接创建账户对象,为什么是给相同的账户存钱
//time:存款次数 money:每次存款金额
public Customer(int time, double money) {
super();
this.time = time;
this.money = money;

}

public void run() {
// TODO Auto-generated method stub
System.out.println(account);
account.deposit(time,money);
}
}
...全文
127 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
rickylin86 2016-07-17
  • 打赏
  • 举报
回复
你上面的代码是是新建一个Customer对象.然后创建两个公用这个对象的线程.而对于同一个Customer对象来说Account对象只有一个.所以当然两个线程会对同一个账户进行操作了.
三棵树aa 2016-07-17
  • 打赏
  • 举报
回复
com.hlg.Thread.Account@1cdeff 储户一存钱1000.0 余额:1000.0 储户一存钱1000.0 余额:2000.0 储户一存钱1000.0 余额:3000.0 储户一存钱1000.0 余额:4000.0 储户一存钱1000.0 余额:5000.0 com.hlg.Thread.Account@1cdeff 储户二存钱1000.0 余额:6000.0 储户二存钱1000.0 余额:7000.0 储户二存钱1000.0 余额:8000.0 储户二存钱1000.0 余额:9000.0 储户二存钱1000.0 余额:10000.0 这是执行结果

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧