Java多執行緒簡單樣例(一):銀行存取錢問題
阿新 • • 發佈:2019-01-07
Bank類
public class Bank { private static int money; public int getMoney(){ return money; } public void saveMoney(int m){ synchronized (this) { System.out.println("存錢後的總金額:"+(money+=m)); } } public void drawMoney(int m){ synchronized (this) { Bank bank = new Bank(); if (bank.getMoney()<=0) { System.out.println("取錢失敗,餘額為0"); }else { System.out.println("取錢後剩的總金額:"+(money-=m)); } } } public static void main(String[] args) { Mans m1 = new Mans(); Womens w = new Womens(); Thread t1 = new Thread(m1); Thread t2 = new Thread(m1); Thread t3 = new Thread(m1); Thread t4 = new Thread(w); Thread t5 = new Thread(w); Thread t6 = new Thread(w); t1.start(); t2.start(); t3.start(); t4.start(); t5.start(); t6.start(); } }
Mans類:負責存錢
public class Mans implements Runnable{ private Bank bank = new Bank(); public void run() { int m = 100; int i=0; while (i<5) { bank.saveMoney(m); i++; try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } }
Womens類“負責取錢”
public class Womens implements Runnable{ private Bank bank = new Bank(); public void run() { int m = 100; int i=0; //bank.getMoney()>0 while (i<5) { bank.drawMoney(m); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } i++; } } }
執行後結果如下:
取錢後剩的總金額:0
存錢後的總金額:100
取錢失敗,餘額為0
存錢後的總金額:100
取錢後剩的總金額:0
存錢後的總金額:100
取錢後剩的總金額:0
取錢後剩的總金額:0
取錢失敗,餘額為0
存錢後的總金額:100
存錢後的總金額:100
存錢後的總金額:200
取錢後剩的總金額:100
存錢後的總金額:200
取錢後剩的總金額:100
存錢後的總金額:200
存錢後的總金額:300
取錢後剩的總金額:200
取錢後剩的總金額:100
取錢後剩的總金額:0
存錢後的總金額:100
取錢後剩的總金額:0
存錢後的總金額:100
存錢後的總金額:200
取錢後剩的總金額:100
存錢後的總金額:200
取錢後剩的總金額:100
存錢後的總金額:200
取錢後剩的總金額:100
存錢後的總金額:200