当前位置:网站首页>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 :

边栏推荐
- 【Rust 笔记】17-并发(上)
- Error ora-28547 or ora-03135 when Navicat connects to Oracle Database
- Leetcode stack related
- 2021apmcm post game Summary - edge detection
- Overview of variable resistors - structure, operation and different applications
- [BMZCTF-pwn] ectf-2014 seddit
- [2021]GIRAFFE: Representing Scenes as Compositional Generative Neural Feature Fields
- SPI details
- 中国剩余定理 AcWing 204. 表达整数的奇怪方式
- __ builtin_ Popcount() counts the number of 1s, which are commonly used in bit operations
猜你喜欢

Network security skills competition in Secondary Vocational Schools -- a tutorial article on middleware penetration testing in Guangxi regional competition

博弈论 AcWing 893. 集合-Nim游戏

1.13 - RISC/CISC

SPI details

QQ computer version cancels escape character input expression
![[2020]GRAF: Generative Radiance Fields for 3D-Aware Image Synthesis](/img/20/826cc9d514496955a557439881234d.jpg)
[2020]GRAF: Generative Radiance Fields for 3D-Aware Image Synthesis

WordPress switches the page, and the domain name changes back to the IP address

MySQL advanced part 2: storage engine

LeetCode 0107. Sequence traversal of binary tree II - another method
![Introduction to LVS [unfinished (semi-finished products)]](/img/72/d5a943a8d6d71823dcbd7f23dda35b.png)
Introduction to LVS [unfinished (semi-finished products)]
随机推荐
SPI 详解
Leetcode divide and conquer / dichotomy
数据可视化图表总结(二)
Niu Mei's math problems
Basic explanation of typescript
[rust notes] 17 concurrent (Part 2)
Winter vacation water test 1 Summary
What is socket? Basic introduction to socket
11-gorm-v2-02-create data
CPU内核和逻辑处理器的区别
redis发布订阅命令行实现
区间问题 AcWing 906. 区间分组
【LeetCode】Day95-有效的数独&矩阵置零
【Rust 笔记】14-集合(上)
1040 Longest Symmetric String
[rust notes] 13 iterator (Part 2)
Daily question 1189 Maximum number of "balloons"
Appium automation test foundation - Summary of appium test environment construction
【Rust 笔记】16-输入与输出(下)
[2020]GRAF: Generative Radiance Fields for 3D-Aware Image Synthesis