使用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
使用ReentrantLock同步,经典银行账户问题的更多相关文章
- 使用synchronized同步,经典银行账户问题
1.新建Account类,使用synchronized同步增加和减少金额方法. package com.xkzhangsan.synchronizedpack.bank; public class A ...
- 使用Semaphore同步,经典银行账户问题
1.新建Account类,使用Semaphore同步增加和减少金额方法. package com.xkzhangsan.semaphorepack.bank; import java.util.con ...
- 使用AtomicLong,经典银行账户问题
1.新建Account类,使用AtomicLong定义账户余额,增加和减少金额方法使用getAndAdd方法. package com.xkzhangsan.atomicpack.bank; impo ...
- java并发编程——通过ReentrantLock,Condition实现银行存取款
java.util.concurrent.locks包为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器.该框架允许更灵活地使用锁和条件,但以更难用的语法为代价. Lock 接口 ...
- 简单练习题2编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能
编写Java应用程序.首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”.“取款”和“余额查询”.其次, 编写一个主类,在主类中测试Account类的 ...
- 申请Payoneer美国万事达信用卡,可获得一个美国虚拟银行账户,立即注册可得25美元
申请Payoneer美国万事达信用卡,可获得一个美国虚拟银行账户,可以在国内任意一个支持万事达的ATM.POS机上取现和刷卡消费.Payoneer可以网上购物,购买国外的产品,对我们有一个好处就是利用 ...
- 银行账户管理系统(oracle数据库连接池,数据库的链接,)
/* * 银行账户管理系统: * 属性:账户id,姓名,金额salary,利息类型: *管理员模块实现的功能: * 1.给用户开户 * 2.查询所有账户信息 * 用户模块实现的功能: * 1.显示用户 ...
- OC1_银行账户类
// // BankAccount.h // OC1_银行账户类 // // Created by zhangxueming on 15/6/10. // Copyright (c) 2015年 zh ...
- (转)Oracle EBS 有效银行账户取值 银行科目
SELECT ba.bank_account_id, --银行账户key ftv.territory_short_name, --国家 ftv.territory_code, --国家简称 cb.ba ...
随机推荐
- Ubuntu16.04更新python3.5到python3.7
下载wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1rc2.tgz 解压tar zxvf Python-3.7.1rc2.tgzcd ...
- 存储过程中拼接sql并且参数化
ALTER PROCEDURE [dbo].[proc_test] ( ) = ' order by id desc ', @userid int, @stime datetime, @etime d ...
- if(a)
let a = undefined; let b = null; let c = ''; let d = ; let e = {}; let f = []; if (a) { console.log( ...
- js中类似null==flase的比较图集
以上是比较全的图集了,大家可以自行测试.
- Modelsimobjects空白无显示问题和ISim仿真时出现空白
困扰朕长达一周的问题得以解决!!!!! 发生这种情况的根源是win10自带的防火墙的问题.只有关闭防火墙,再重新打开软件进行仿真就能出现正常的仿真界面. 关闭防火墙的方法为:控制面板>>系 ...
- AIX修改密码
grid@DB01:/home/grid>su - oracleoracle's Password: 3004-303 There have been too many unsuccessful ...
- C语言--关于第0次作业
你对网络专业或者计算机专业了解是怎样? 答:我认为网络专业或者计算机专业是网络管理.软件开发.程序设计等一些高等企业就业的基础知识.以及涉及到环境开发等的专业领域.知道它很难,但是社会对它的需求很高. ...
- turtle模块绘图
import turtle #运动命令 # forward(d) 向前移动d长度 # backward(d) 向后移动d长度 # right(d) 向右转动多少度 #left(d) 向左转动多少度 # ...
- Sublime 个人常用快捷键
Sublime 个人常用快捷键 Hot Key Alt + F3 选中文本所以有相同项;同多次Ctrl + D Ctrl + L 选中整行,继续按可继续选 Ctrl + Shift + M 选择括号内 ...
- MongoDB基本信息
一.MongoDB简介 来源:在2007年,由纽约一个叫10gen的创业团队开发,公司现在叫做MongoDB Inc,最初被开发为PAAS(平台即服务). 数据库类型:基于分布式文件存储的数据库.由C ...