1. 程式人生 > 實用技巧 >Java多執行緒-經典例題-生產者消費者問題

Java多執行緒-經典例題-生產者消費者問題

/**
 * 要求:
 * 銀行有一個賬戶,有兩個儲戶分別向同一個賬戶存3000元,每次存1000元,存三次,每次存完列印賬號餘額。
 *
 * 分析:
 * 1.是否是多執行緒問題?是,兩個儲戶執行緒
 * 2.是否有共享資料?有,賬戶餘額
 * 3.是否有執行緒安全問題?有
 * 4.如何解決執行緒安全問題?同步機制:有三種方式
 *
 * @author orz
 */
class Account{
    private double money;
    public Account(double money)
    {
        this.money=money;
    }
    public
synchronized 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(); } }