1. 程式人生 > >多執行緒——用同步程式碼塊解決經典儲戶銀行存錢問題

多執行緒——用同步程式碼塊解決經典儲戶銀行存錢問題

package com.work.wor01;
/**
 * 需求:有兩個儲戶同時到一個銀行去存錢,每人存3次,每次存100元。
 * 要求打印出銀行每次金額的變化情況(假設銀行沒錢)
 * 
 * 分析:得出有兩個類:銀行和儲戶
 * 這是一個多執行緒的問題,如何分析他的執行緒安全問題呢?
 * 1.通過執行緒的任務程式碼分析。
 * 2.有沒有共享資料,有沒有多條語句在操作共享資料。
 * */
class Bank{
	private int sum = 0;
	public void add(int num){
			sum = sum + num;
			System.out.println(Thread.currentThread().getName()+"...sum="+sum);
	}
}

class Customer implements Runnable{

	Bank b = new Bank();
	Object obj = new Object();

	@Override
	public void run() {
		synchronized (obj) {
			for(int i = 0;i<3;i++){
				b.add(100);
			}
		}
	}
}

public class BankThread {
	public static void main(String[] args) {
		Customer c = new Customer();
		
		Thread t1 = new Thread(c);
		Thread t2 = new Thread(c);
		
		t1.start();
		t2.start();
	}
}