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(); } }