1. 程式人生 > 程式設計 >Java實現銀行存取款

Java實現銀行存取款

本文例項為大家分享了Java銀行存取款的具體程式碼,供大家參考,具體內容如下

1.不加鎖情況

執行結果:

程式碼:將加鎖情況中加鎖部分進行註釋即可

2.加鎖情況

執行結果

緩衝區程式碼

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+"元"+"現在共有存款"+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+"元"+"現在共有存款"+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();
 }
 }
 }
}

主函式程式碼

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();
 
 }
}

更多學習資料請關注專題《管理系統開發》。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。