多執行緒——用同步程式碼塊解決經典儲戶銀行存錢問題
阿新 • • 發佈:2019-01-23
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(); } }