Java實現(xiàn)銀行存取款
更新時間:2019年12月26日 15:10:52 作者:盈小盈*ZERO
這篇文章主要為大家詳細介紹了Java實現(xiàn)銀行存取款,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了Java銀行存取款的具體代碼,供大家參考,具體內(nèi)容如下
1.不加鎖情況
運行結(jié)果:

代碼:將加鎖情況中加鎖部分進行注釋即可
2.加鎖情況
運行結(jié)果

緩沖區(qū)代碼
package Bank;
import java.util.LinkedList;
public class BankAccount {
static double sum=1000;
private LinkedList<Object> list = new LinkedList<>();
//存款
public void deposit() {
synchronized(list)
{
System.out.print(list.size());
while(list.size()>1) {
System.out.println("暫不支持存款");
try {
// System.out.print("wait");
list.wait();
} catch (InterruptedException e) {
e.printStackTrace();
//System.out.print("wait");
}
}
list.add(new Object());
int money=300;
sum=sum+money;
System.out.println(Thread.currentThread().getName()+"存入了"+money+"元"+"現(xiàn)在共有存款"+sum);
list.notifyAll();
}
}
//取款
public void withdrawal() {
synchronized(list)
{
while(list.size()==0) {
// int money=50;
// sum=sum-money;
System.out.println(Thread.currentThread().getName()+"暫時不支持取款");
try {
list.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
list.remove();
int money=200;
if(sum>200)
{
sum=sum-money;
System.out.println(Thread.currentThread().getName()+"取出了"+money+"元"+"現(xiàn)在共有存款"+sum);
}else {
System.out.println("賬戶余額不足");
}
list.notify();
}
}
}
存款代碼
package Bank;
public class Deposit implements Runnable {
private BankAccount bankAccount1;
public Deposit() {}
public Deposit(BankAccount bankAccount1) {
this.bankAccount1=bankAccount1;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true) {
try {
Thread.sleep(2000);
bankAccount1.deposit();
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
}
取款代碼
package Bank;
public class Withdrawal implements Runnable{
private BankAccount bankAccount;
public Withdrawal() {}
public Withdrawal(BankAccount bankAccount)
{
this.bankAccount=bankAccount;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true)
{
try {
Thread.sleep(3000);
bankAccount.withdrawal();
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
}
主函數(shù)代碼
package Bank;
public class Main {
public static void main(String[] args) {
BankAccount bankAccount1=new BankAccount();
Thread d1=new Thread(new Deposit(bankAccount1));
Thread d2=new Thread(new Deposit(bankAccount1));
Thread d3=new Thread(new Deposit(bankAccount1));
Thread w1=new Thread(new Withdrawal(bankAccount1));
Thread w2=new Thread(new Withdrawal(bankAccount1));
Thread w3=new Thread(new Withdrawal(bankAccount1));
d1.start();
d2.start();
d3.start();
w1.start();
w2.start();
w3.start();
}
}
更多學習資料請關(guān)注專題《管理系統(tǒng)開發(fā)》。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
string boot 與 自定義interceptor的實例講解
下面小編就為大家分享一篇string boot 與 自定義interceptor的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12
使用idea的database模塊繪制數(shù)據(jù)庫er圖的方法
這篇文章主要介紹了使用idea的database模塊繪制數(shù)據(jù)庫er圖,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-07-07
SpringBoot后端進行數(shù)據(jù)校驗JSR303的使用詳解
這篇文章主要介紹了SpringBoot后端進行數(shù)據(jù)校驗JSR303的使用詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
java數(shù)據(jù)結(jié)構(gòu)基礎:單,雙向鏈表
這篇文章主要介紹了Java的數(shù)據(jù)解構(gòu)基礎,希望對廣大的程序愛好者有所幫助,同時祝大家有一個好成績,需要的朋友可以參考下,希望能給你帶來幫助2021-07-07

