Java多執行緒-經典例題-生產者消費者問題
阿新 • • 發佈:2020-07-28
/** * 要求: * 銀行有一個賬戶,有兩個儲戶分別向同一個賬戶存3000元,每次存1000元,存三次,每次存完列印賬號餘額。 * * 分析: * 1.是否是多執行緒問題?是,兩個儲戶執行緒 * 2.是否有共享資料?有,賬戶餘額 * 3.是否有執行緒安全問題?有 * 4.如何解決執行緒安全問題?同步機制:有三種方式 * * @author orz */ class Account{ private double money; public Account(double money) { this.money=money; } publicsynchronized void setMoney(double amt) { if (amt>0) { try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } money=money+amt; System.out.println(Thread.currentThread().getName()+"存錢成功,餘額為:"+money); } } } class Customer extends Thread{ private Account acct; public Customer(Account acct) { this.acct=acct; } @Override public void run() { for (int i = 0; i <3 ; i++) { acct.setMoney(1000); } } }/** * @author orz */ public class ThreadTest { public static void main(String[] args) { Account acct=new Account(0); Customer c1=new Customer(acct); Customer c2=new Customer(acct); c1.setName("甲"); c2.setName("乙"); c1.start(); c2.start(); } }