当前位置:网站首页>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 :
边栏推荐
- MySQL advanced part 1: triggers
- 1041 Be Unique
- MySQL advanced part 1: stored procedures and functions
- NotImplementedError: Cannot convert a symbolic Tensor (yolo_boxes_0/meshgrid/Size_1:0) to a numpy ar
- 【Rust 笔记】15-字符串与文本(上)
- QQ电脑版取消转义符输入表情
- 多屏电脑截屏会把多屏连着截下来,而不是只截当前屏
- 【Rust 笔记】17-并发(下)
- Leetcode-31: next spread
- 4. 对象映射 - Mapping.Mapster
猜你喜欢
Redis publish subscribe command line implementation
Gaussian elimination acwing 884 Gauss elimination for solving XOR linear equations
Arduino 控制的 RGB LED 无限镜
实时时钟 (RTC)
WordPress switches the page, and the domain name changes back to the IP address
SPI 详解
1.14 - assembly line
做 SQL 性能优化真是让人干瞪眼
MySQL advanced part 2: SQL optimization
Quickly use Amazon memorydb and build your own redis memory database
随机推荐
Leetcode-1200: minimum absolute difference
Leetcode array operation
Chart. JS - Format Y axis - chart js - Formatting Y axis
Network security skills competition in Secondary Vocational Schools -- a tutorial article on middleware penetration testing in Guangxi regional competition
[rust notes] 16 input and output (Part 2)
【Rust 笔记】15-字符串与文本(上)
4. Object mapping Mapster
__ builtin_ Popcount() counts the number of 1s, which are commonly used in bit operations
MIT-6874-Deep Learning in the Life Sciences Week 7
【Rust 笔记】14-集合(上)
C job interview - casting and comparing - C job interview - casting and comparing
MySQL advanced part 1: triggers
打印机脱机时一种容易被忽略的原因
Leetcode-9: palindromes
Applicable to Net free barcode API [off] - free barcode API for NET [closed]
高斯消元 AcWing 884. 高斯消元解异或線性方程組
Redis publish subscribe command line implementation
实时时钟 (RTC)
SPI details
多屏电脑截屏会把多屏连着截下来,而不是只截当前屏