使用AtomicLong,经典银行账户问题
1.新建Account类,使用AtomicLong定义账户余额,增加和减少金额方法使用getAndAdd方法。
package com.xkzhangsan.atomicpack.bank;
import java.util.concurrent.atomic.AtomicLong;
public class Account {
private AtomicLong balance = new AtomicLong();
public void addAmount(long amount){
this.balance.getAndAdd(amount);
}
public void substractAmount(long amount){
this.balance.getAndAdd(-amount);
}
public long getBalance() {
return balance.get();
}
public void setBalance(long balance) {
this.balance.set(balance);
}
}
2.Bank和Company类与https://www.cnblogs.com/xkzhangsanx/p/10759690.html一致。
3.测试类
package com.xkzhangsan.atomicpack.bank;
public class Main {
public static void main(String[] args) {
Account account = new Account();
account.setBalance(1000);
Company company = new Company(account);
Thread companyThread = new Thread(company);
Bank bank = new Bank(account);
Thread bankThread = new Thread(bank);
System.out.printf("Account start money:%d\n", account.getBalance());
companyThread.start();
bankThread.start();
try {
companyThread.join();
bankThread.join();
System.out.printf("Account end money:%d\n", account.getBalance());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
4.测试结果
Account start money:1000
Bank substract 1000 balance:1000
Company add 1000 balance:1000
Company add 1000 balance:1000
Bank substract 1000 balance:0
Company add 1000 balance:2000
Company add 1000 balance:2000
Company add 1000 balance:3000
Company add 1000 balance:4000
Company add 1000 balance:5000
Company add 1000 balance:6000
Company add 1000 balance:7000
Company add 1000 balance:8000
Bank substract 1000 balance:1000
Bank substract 1000 balance:7000
Bank substract 1000 balance:6000
Bank substract 1000 balance:5000
Bank substract 1000 balance:4000
Bank substract 1000 balance:3000
Bank substract 1000 balance:2000
Bank substract 1000 balance:1000
Account end money:1000
参考:java7并发编程实战手册
GitHub地址:https://github.com/xkzhangsan/java-concurrent-practice
使用AtomicLong,经典银行账户问题的更多相关文章
- 使用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 ...
- 使用ReentrantLock同步,经典银行账户问题
1.新建Account类,使用ReentrantLock同步增加和减少金额方法. package com.xkzhangsan.reentrantlockpack.bank; import java. ...
- 简单练习题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 ...
- Java实验-课程设计报告一:个人银行账户管理系统SavingAccountManageSystem-具体文档+源码
课程设计报告一:个人银行账户管理系统 此文档及源码仅供参考 不得直接复制使用 author: [xxxxxxxxx xx xxxx] date: "2019-04-12" 作 者: ...
随机推荐
- Lombok 介绍
Lombok使用 介绍 在项目中使用Lombok可以减少很多重复代码的书写.比如说getter/setter/toString等方法的编写. IDEA中的安装 打开IDEA的Setting –> ...
- js表单反显
/* * 表单自动回显js * 依赖JQURY * 使用参考:$("#form1").form("load",{"id":"112 ...
- [ipsec][crypto] IKEv2的协商交互分析
一: 无论协商了什么样的加密算法.DH都交换一块长度为32byte的内存,作为key. IKE和esp的key,分别基于这块内存生成. 二: 当esp的算法协商没有指定dh group时,rekey将 ...
- ES6语法 Promise Iterator
类和对象 基本定义: class Parent{ constructor(name='lmx'){ //name= 默认值 this.name=name } } let v_parent = new ...
- python练习题-day23
1.人狗大战(组合) class Person: def __init__(self,name,hp,aggr,sex,money): self.name=name self.hp=hp self.a ...
- php优秀的库
PHP 是一种通用开源脚本语言.语法吸收了 C 语言.Java 和 Perl 的特点,利于学习,使用广泛,主要适用于 Web 开发领域,是大多数后端开发者的首选.PHP 作为最受欢迎的编程语言之一,经 ...
- 安卓系统广播暴露设备信息-Android System Broadcasts Expose Device Information
Android device details are being exposed to running applications via Wi-Fi broadcasts in the mobile ...
- Python3.0科学计算学习之绘图(三)
matplotlib对象: 使用matplotlib的pyplot模块,可以供用户直接使用最重要的绘图命令.多数情况下,我们希望创建一个图形并且立即展示出来,但是有时如果生成要通过更改其属性来修改的图 ...
- #WEB安全基础 : HTTP协议 | 0x16 HTTPS:证书,证书,全是证书
现在想做点什么事都需要证书,要不就会让我们回忆起一个典故:滥竽充数 HTTPS使用了公开密钥加密,如何保证公开密钥就是真正的公开密钥呢?攻击者可能会替换公开密钥,这时候就需要验证,所以它采用了数字证书 ...
- Java面试宝典(2018版)
置顶 2018年11月10日 23:49:18 我要取一个响亮的昵称 阅读数:8893 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chen ...