多线程银行存钱系统模拟

这是一个多线程的银行存钱系统模拟

需求是

1.有三个人希望在银行存钱,互不影响,所以每个人占一个线程

2.每次存100元,每人存10次

思路:

1.定义一个银行系统,拥有存钱方法,展示存储状况的方法

2.定义一个存钱的线程类,拥有对银行的操作方法

3.在主线程中实现多个线程同时存钱


import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class BankDeml {
    private static DongYingBank bank=new DongYingBank();
    public static void main(String[] args)
    {
        DuoTreadStore zhang=new DuoTreadStore(bank,"zhangsan");
        DuoTreadStore li=new DuoTreadStore(bank,"lisi");
        DuoTreadStore wang=new DuoTreadStore(bank,"wangwu");
        Thread zhangStore=new Thread(zhang);
        Thread wangStore=new Thread(wang);
        Thread liStore=new Thread(li);
        zhangStore.start();
        liStore.start();
        wangStore.start();

        try {
            Thread.sleep(0b110010000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }//担心主线程进行太快,其他线程还没存上,所以睡一会
        System.out.println(bank.toString());

    }
}


//首先要定义一个银行的存储信息的类
class DongYingBank
{
    private HashMap<String,Double> money;
    DongYingBank()
    {
        money=new HashMap<String,Double>();
    }
    @Override
    public String toString()
    {
        StringBuilder str=new StringBuilder();
        Set<Map.Entry<String,Double>> info=money.entrySet();
        Iterator<Map.Entry<String,Double>> it=info.iterator();
        while(it.hasNext())
        {
            Map.Entry<String,Double> user=it.next();
            str.append(user.getKey()+"存储了"+user.getValue()+"元");
        }
        return str.toString();
    }
    /**
     * 这个函数用于建立用户和存储金钱,已存在用户会自动添加到账户名下,未存在账户会新建
     * @param name 已存在或将要新建的账户
     * @param mon 要添加的金额
    * */
    public synchronized String add(String name,Double mon)
    {
        try{
            if (money.containsKey(name))
            {
                Double qian=money.get(name)+mon;
                money.put(name,qian);
            }
            else{
                money.put(name,mon);
            }

        }
        catch(Exception e)
        {
            return "添加失败,请重新操作";
        }
        return "添加成功";
    }

}

class DuoTreadStore implements Runnable
{
    DongYingBank bank;
    String name;

    DuoTreadStore(DongYingBank bank,String name)
    {
        this.bank=bank;
        this.name=name;

    }
    @Override
    public void run()
    {
        int i=0;
        for(i=0;i<10;i++)
        {
            bank.add(name,100.0);
        }
        System.out.println(name+"把钱存好了");

    }
}

这个程序的特点是,应用到了map集合,多线程,StringBulider.

下面是运行结果:

wangwu把钱存好了
lisi把钱存好了
zhangsan把钱存好了
lisi存储了1000.0元zhangsan存储了1000.0元wangwu存储了1000.0元

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值