多執行緒例項二----兩個人同時存取錢
阿新 • • 發佈:2019-01-04
java 多執行緒簡單例項二----兩個人同一個賬戶取錢
思路:兩個執行緒,一個代表取錢的操作,一個代表存錢的操作,互相不影響,但是要保證存取的資料正確。
程式碼如下:
package com.shone.thread.getmoney; /** * Created by Xiao GuoJian on 2018/1/24. * 兩個人用同一個賬戶在取錢 */ class Bank{ private int money = 2000; /** * 銀行被取出的錢 * @param getMoney */ public void out(int getMoney){ while (money >= 0){ synchronized (this){ if (money >= getMoney){ money = money - getMoney; System.out.println(Thread.currentThread().getName()+" 取出"+getMoney+"元,當前餘額為: "+money+" 元"); } else { System.out.println("餘額不足,當前餘額為: "+money+" 元"); break; } try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } } } } class Person extends Thread{ private Bank bank; private int money;//每次取出多少錢 public Person(String name,Bank bank,int money){ super(name); this.bank = bank; this.money = money; } @Override public void run() { super.run(); bank.out(money); } } public class GetMoneyDemo { public static void main(String[] args) { Bank bank = new Bank(); Person personA = new Person("A",bank,100); Person personB = new Person("B",bank,200); personA.start(); personB.start(); } }