java多线程怎么实现取款小程序
作者:小月亮
时间:2023-04-28
来源:正软商城
浏览:1
1、建立java类这里建立了三个java类,第一个Account类,用于封装账户中的各种信息;第三个DrawThread类用于实现线程体;第二个类主要封装了主函数2、Account类publicclassAccount{//封装账户编号,账户余额和两个成员变量privateStringaccountNo;privatedoublebalance;publicAccount(){};publicAccount(StringaccountNo,doublebalance){this.accountNo=acc
本文目录
1、建立java类

这里建立了三个java类,第一个Account类,用于封装账户中的各种信息;第三个DrawThread类用于实现线程体;第二个类主要封装了主函数
2、Account类
public class Account {
//封装账户编号,账户余额和两个成员变量
private String accountNo;
private double balance;
public Account(){};
public Account(String accountNo,double balance){
this.accountNo=accountNo;
this.balance=balance;
}
public void setAccountNo(String accountNo)
{
this.accountNo=accountNo;
}
public void setBalance(double balance){
this.balance=balance;
}
public String getAccountNo(){
return accountNo;
}
public double getBalance(){
return balance;
}
public int hashCode(){
return accountNo.hashCode();
}
public boolean equals(Object obj){
if(this==obj){
return true;
}
if (obj!=null&&obj.getClass()==Account.class){
Account target=(Account)obj;
return target.getAccountNo().equals(accountNo);
}
return false;
}
}3、DrawThread类
public 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() {
//使用account作为同步监视器,任何线程进入下面同步代码块之前
//必须先获得对account账户的锁定——其他线程无法获得锁,也就无法修改它
synchronized (account) {
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("\t余额为:" + account.getBalance());
} else {
System.out.println(getName() + "取钱失败!余额不足!");
}
}
}
}4、DrawTest类
public class DrawTest {
public static void main(String[] args){
//创建一个账户
Account acct=new Account("1234567",1000);
//模拟两个线程对同一个账户取钱
new DrawThread("jack",acct,800).start();
new DrawThread("rose",acct,800).start();
}
}运行结果:

以上程序有一点需要注意,就是用到了同步代码块。它可以解决run()方法不具备同步安全性(即当两个线程同时发送请求时即会造成异常)
同步代码块:
synchronized (obj){
//需要执行的代码
}如果我们去掉run()方法中的同步代码块,继续运行
Account acct=new Account("1234567",1000);
new DrawThread("jack",acct,800).start();
new DrawThread("rose",acct,800).start();(银行账户一共1000元,Jack和rose分别对同一账户取钱)
运行结果:

作者最新文章
wps如何生成目录自动生成目录
2026-11-05 11:16
二狗PPT怎么用Word文档生成PPT
2026-11-03 14:55
office打开弹出另存为 修复保存设置
2026-11-03 10:08
火山引擎EMRAI助手导出诊断结果方法
2026-11-01 19:35
navicat连接mysql数据库 配置测试方法
2026-10-26 10:02
上一篇:
java MyBatis中jar如何下载
热门文章
更多
精品专题
更多
Mac软件
更多
火山引擎 网页版
Windows/ macOS/ Linux
火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。
















