当前位置:网站首页>Suppose a bank's ATM machine, which allows users to deposit and withdraw money. Now there is 200 yuan in an account, and both user a and user B have the right to deposit and withdraw money from this a
Suppose a bank's ATM machine, which allows users to deposit and withdraw money. Now there is 200 yuan in an account, and both user a and user B have the right to deposit and withdraw money from this a
2022-07-05 06:19:00 【aigo-2021】
Suppose a bank ATM machine , It allows users to deposit and withdraw . Now there is a deposit in an account 200 element , user A And the user B Both have the right to deposit and withdraw money from this account . user A Will deposit 100 element , And users B Remove 50 element , Then the final deposit in the account should be 250 element . The actual operation process is as follows :
(1) to A Deposit operation :
1) Get the deposit amount of the account 200, Time consuming 2s.
2) Increase the account amount 100, Time consuming negligible
3) The newly generated account result 300 Back to ATM On the server of the machine , Time consuming 2s(2) Proceed again B Withdrawal operation :
4) The amount of deposit in the account after being increased 300, Time consuming 2s.
5) Judge whether the withdrawal amount is less than the account balance , if , Reduce the account amount 50, Otherwise, an exception will be thrown , Time consuming negligible .
6) The newly generated account result 250 Back to ATM On the server of the machine , Time consuming 2s.
Please according to the above requirements , take A Operation and B The operations of are represented by threads , Write a Java The program realizes this function .
class ATM {
private float account;
public ATM(float money) {
this.account = money;
}
public synchronized float getAccount(){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return account;
}
public synchronized void deposit(float money){
account+=money;
}
public synchronized void drawMoney(float money) throws Exception {
if (account < money) {
throw new Exception(" Lack of balance ");
}
account -= money;
}
}
class UserA extends Thread{
private ATM atm;
private float money;
public UserA(ATM a,float m){
atm=a;
money=m;
}
public void run(){
System.out.println(" The amount deposited in the account is :"+atm.getAccount()+" element ");
System.out.println(" user A Save "+money+" element " );
try{
atm.deposit(money);
}
catch(Exception e){ }
System.out.println(" The balance is :"+atm.getAccount()+" element ");
}
}
class UserB extends Thread{
private ATM atm;
private float money;
public UserB(ATM a,float m){
atm=a;
money=m;
}
public void run(){
System.out.println(" The amount deposited in the account is :"+atm.getAccount()+" element ");
System.out.println(" user B Take out "+money+" element " );
try{
atm.drawMoney(money);
System.out.println(" The balance is :"+atm.getAccount()+" element ");
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
class TestATM{
public static void main(String[] args) {
ATM a=new ATM(200);
UserA userA=new UserA(a,100);
UserB userB=new UserB(a,50);
userA.start();
try {
userA.join();// The current thread is blocked , Until the execution of another thread is completed , Unblock current thread
} catch (InterruptedException e) {
userB.start();
}
System.out.println("==================");
userB.start();
try {
userB.join();
} catch (InterruptedException e) {
userA.start();
}
}
}Running results :

边栏推荐
- LeetCode 1200. Minimum absolute difference
- Leetcode stack related
- Leetcode divide and conquer / dichotomy
- 1.15 - input and output system
- SPI 详解
- In depth analysis of for (VaR I = 0; I < 5; i++) {settimeout (() => console.log (I), 1000)}
- 博弈论 AcWing 893. 集合-Nim游戏
- 【Rust 笔记】15-字符串与文本(下)
- Operator priority, one catch, no doubt
- One question per day 1020 Number of enclaves
猜你喜欢

MySQL advanced part 2: MySQL architecture

Data visualization chart summary (II)

Traditional databases are gradually "difficult to adapt", and cloud native databases stand out

Chapter 6 relational database theory

2021apmcm post game Summary - edge detection

阿里巴巴成立企业数智服务公司“瓴羊”,聚焦企业数字化增长

求组合数 AcWing 889. 满足条件的01序列

RGB LED infinite mirror controlled by Arduino

Open source storage is so popular, why do we insist on self-development?

SQLMAP使用教程(二)实战技巧一
随机推荐
Record the process of configuring nccl and horovod in these two days (original)
博弈论 AcWing 891. Nim游戏
求组合数 AcWing 888. 求组合数 IV
Nested method, calculation attribute is not applicable, use methods
【LeetCode】Easy | 20. Valid parentheses
做 SQL 性能优化真是让人干瞪眼
Leetcode heap correlation
4. 对象映射 - Mapping.Mapster
阿里巴巴成立企业数智服务公司“瓴羊”,聚焦企业数字化增长
Leetcode-6108: decrypt messages
[rust notes] 16 input and output (Part 2)
MatrixDB v4.5.0 重磅发布,全新推出 MARS2 存储引擎!
MySQL advanced part 2: the use of indexes
【Rust 笔记】17-并发(下)
Appium foundation - use the first demo of appium
MySQL advanced part 2: storage engine
SPI details
Appium自动化测试基础 — Appium测试环境搭建总结
Simple selection sort of selection sort
Filter the numbers and pick out even numbers from several numbers