请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术交流,必有回复!

疯狂Java联盟

 找回密码
 加入联盟
查看: 333|回复: 1

java 多线程的问题

[复制链接]
发表于 2018-6-8 10:51:21 | 显示全部楼层 |阅读模式
class Account
{
private String accountNo;
private double balance;
public Account() {};
public Account(String accountNo,double balance)
{
this.accountNo=accountNo;
this.balance=balance;
}
public void setBalance(double balance)
{
this.balance=balance;
}
public double getBalance()
{
return this.balance;
}

}

class DrawThread extends Thread
{
private Account account;
private double drawAmount;
public DrawThread(String name,Account account,double drawAmount)
{
super(name);
this.account=account;
this.drawAmount=drawAmount;
}
public void run()
{
if(account.getBalance()>=drawAmount)
{
System.out.println(getName()+"取钱:"+drawAmount);
try
{
Thread.sleep(1);
}
catch(InterruptedException ex)
{
ex.printStackTrace();
}
account.setBalance(account.getBalance()-drawAmount);
System.out.println("余额为:"+account.getBalance());
}
else
System.out.println(getName()+"余额不足");
}
}

public class DrawTest
{

public static void main(String[] args) {
// TODO Auto-generated method stub
Account acct=new Account("123456",1000);
new DrawThread("甲",acct,800).start();
new DrawThread("乙",acct,800).start();

}

}
输出是:
乙取钱:800.0
甲取钱:800.0
余额为:200.0
余额为:-600.0

DrawThread类继承的Thread 来创建的线程,那么不是不能共享实例变量吗?

private Account account;
private double drawAmount; 这两个是实例变量,为什么两个线程还能共享呢?
发表于 2018-6-9 10:42:11 | 显示全部楼层
因为你这个变量是在main方法中定义的。
我们说的不能共享变量,指的是线程本身持有的变量不能共享
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11094030号 )

GMT+8, 2018-12-13 03:54 , Processed in 0.297563 second(s), 6 queries , File On.

快速回复 返回顶部 返回列表