当前位置:网站首页>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 :
边栏推荐
- Niu Mei's math problems
- redis发布订阅命令行实现
- JS quickly converts JSON data into URL parameters
- Leetcode divide and conquer / dichotomy
- Doing SQL performance optimization is really eye-catching
- Leetcode-6111: spiral matrix IV
- Multi screen computer screenshots will cut off multiple screens, not only the current screen
- SQLMAP使用教程(一)
- Leetcode-556: the next larger element III
- New title of module a of "PanYun Cup" secondary vocational network security skills competition
猜你喜欢
Sqlmap tutorial (II) practical skills I
背包问题 AcWing 9. 分组背包问题
RGB LED infinite mirror controlled by Arduino
Series of how MySQL works (VIII) 14 figures explain the atomicity of MySQL transactions and the principle of undo logging
区间问题 AcWing 906. 区间分组
MySQL advanced part 2: storage engine
Appium automation test foundation - Summary of appium test environment construction
Sqlmap tutorial (1)
redis发布订阅命令行实现
求组合数 AcWing 888. 求组合数 IV
随机推荐
MySQL advanced part 1: index
Leetcode-22: bracket generation
传统数据库逐渐“难适应”,云原生数据库脱颖而出
Leetcode-6108: decrypt messages
【Rust 笔记】14-集合(上)
Leetcode-31: next spread
Shutter web hardware keyboard monitoring
MySQL advanced part 2: MySQL architecture
LeetCode-61
Leetcode-3: Longest substring without repeated characters
Basic explanation of typescript
Arduino 控制的 RGB LED 无限镜
Traversal of leetcode tree
[leetcode] day94 reshape matrix
1040 Longest Symmetric String
One question per day 1020 Number of enclaves
Appium automation test foundation - Summary of appium test environment construction
927. Trisection simulation
Leetcode stack related
CPU内核和逻辑处理器的区别