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

 

posted @ 2020-07-27 22:24  orz江小鱼  阅读(249)  评论(0编辑  收藏  举报