多线程学习(一)银行存取款

今天同窗问到银行存取款,如何保持同步,随手写了一个简单例子.java

首先是银行:ide

private int money = 1000;
    
    public synchronized void add(int n) {
        money += n;
        try {
            Thread.sleep(1000);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName() + "----余额: " + money);
    }
    
    public synchronized void reduce(int n) {
        if(money - n >= 0) {
            money -= n;
        } else {
            System.out.println("余额不足");
        }
        try {
            Thread.sleep(1000);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName() + "----余额: " + money);
    }测试

其中关键在于方法加锁,利用的是java内置的互斥锁机制.this

接下来就是用户:.net

    public Bank bank;
    static final String TYPE_ADD = "add";  
    static final String TYPE_REDUCE = "reduce";
    private String type;  
    private int time;
    private int money;  
    public Customer() {  
    }  
 
    public Customer(Bank bank, String type, int time, int money) {  
        this.bank = bank;  
        this.type = type;  
        this.time = time;  
        this.money = money;  
    }
    
    @Override
    public void run() {
        for(int i = 0; i < time; i++) {
            if (TYPE_ADD.equals(type)) {  
                bank.add(money);  
            } else if (TYPE_REDUCE.equals(type)) {  
                bank.reduce(money);  
            }
        }
    }get

最后是测试类:同步

    Bank bank = new Bank();
        Customer a1 = new Customer(bank, Customer.TYPE_ADD, 10, 100);
        Customer a2 = new Customer(bank, Customer.TYPE_REDUCE, 10, 100);
        
        Thread t1 = new Thread(a1);
        Thread t2 = new Thread(a2);
        t1.start();
        t2.start();io

相关文章
相关标签/搜索