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

边栏推荐
- 做 SQL 性能优化真是让人干瞪眼
- Operator priority, one catch, no doubt
- Leetcode array operation
- Leetcode-22: bracket generation
- In depth analysis of for (VaR I = 0; I < 5; i++) {settimeout (() => console.log (I), 1000)}
- [rust notes] 17 concurrent (Part 2)
- 容斥原理 AcWing 890. 能被整除的数
- liunx启动redis
- Leetcode-3: Longest substring without repeated characters
- MySQL advanced part 1: index
猜你喜欢
![Introduction to LVS [unfinished (semi-finished products)]](/img/72/d5a943a8d6d71823dcbd7f23dda35b.png)
Introduction to LVS [unfinished (semi-finished products)]

SPI 详解

LeetCode-54

做 SQL 性能优化真是让人干瞪眼

Leetcode-6110: number of incremental paths in the grid graph

MySQL advanced part 2: optimizing SQL steps

Gauss Cancellation acwing 884. Solution d'un système d'équations Xor linéaires par élimination gaussienne

Appium foundation - use the first demo of appium

区间问题 AcWing 906. 区间分组

Matrixdb V4.5.0 was launched with a new mars2 storage engine!
随机推荐
How to understand the definition of sequence limit?
Leetcode-556: the next larger element III
1040 Longest Symmetric String
Overview of variable resistors - structure, operation and different applications
快速使用Amazon MemoryDB并构建你专属的Redis内存数据库
Niu Mei's math problems
Multi screen computer screenshots will cut off multiple screens, not only the current screen
Chart. JS - Format Y axis - chart js - Formatting Y axis
How to set the drop-down arrow in the spinner- How to set dropdown arrow in spinner?
C job interview - casting and comparing - C job interview - casting and comparing
RGB LED infinite mirror controlled by Arduino
数据可视化图表总结(一)
博弈论 AcWing 892. 台阶-Nim游戏
There are three kinds of SQL connections: internal connection, external connection and cross connection
Presentation of attribute value of an item
LeetCode 0107. Sequence traversal of binary tree II - another method
What is socket? Basic introduction to socket
Leetcode-6109: number of people who know secrets
【Rust 笔记】14-集合(下)
New title of module a of "PanYun Cup" secondary vocational network security skills competition