zoukankan      html  css  js  c++  java
  • 使用ReentrantLock同步,经典银行账户问题

    1.新建Account类,使用ReentrantLock同步增加和减少金额方法。

    package com.xkzhangsan.reentrantlockpack.bank;
    
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    public class Account {
        
        private double balance;
        
        private final Lock lock = new ReentrantLock();
        
        public void addAmount(double amount){
            lock.lock();
            try {
                double tmp = balance;
                Thread.sleep(10);
                tmp+=amount;
                balance=tmp;
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
        }
    
        public void substractAmount(double amount){
            lock.lock();
            try {
                double tmp = balance;
                Thread.sleep(10);
                tmp-=amount;
                balance=tmp;
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
        }
        
    
        public double getBalance() {
            return balance;
        }
    
        public void setBalance(double balance) {
            this.balance = balance;
        }
        
        
    
    }

    2.其他和https://www.cnblogs.com/xkzhangsanx/p/10759690.html一致。

    注意释放锁

    finally {
                lock.unlock();
            }

    3.测试结果

    Account start money:1000.000000
    Company add 1000 balance:2000.0
    Bank substract 1000 balance:1000.0
    Company add 1000 balance:2000.0
    Bank substract 1000 balance:1000.0
    Company add 1000 balance:2000.0
    Bank substract 1000 balance:1000.0
    Company add 1000 balance:2000.0
    Bank substract 1000 balance:1000.0
    Company add 1000 balance:2000.0
    Bank substract 1000 balance:1000.0
    Company add 1000 balance:2000.0
    Bank substract 1000 balance:1000.0
    Company add 1000 balance:2000.0
    Bank substract 1000 balance:1000.0
    Company add 1000 balance:2000.0
    Company add 1000 balance:3000.0
    Bank substract 1000 balance:2000.0
    Company add 1000 balance:3000.0
    Bank substract 1000 balance:2000.0
    Bank substract 1000 balance:1000.0
    Account end money:1000.000000

    参考:java7并发编程实战手册

    GitHub地址:https://github.com/xkzhangsan/java-concurrent-practice

    寻找撬动地球的支点(解决问题的方案),杠杆(Java等编程语言)已经有了。xkzhangsan
  • 相关阅读:
    tomcat进阶操作
    tomcat环境部署
    CentOS 7.2安装lepus数据库监控系统
    常见的Linux系统监控命令
    zabbix使用jmx监控tomcat
    zabbix配置文件详解
    zabbix2.2.22 升级3.0.18
    zabbix日志监控
    zabbix api的使用
    zabbix低级自动发现之mysql多实例
  • 原文地址:https://www.cnblogs.com/xkzhangsanx/p/10765476.html
Copyright © 2011-2022 走看看