使用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

转载于:https://www.cnblogs.com/xkzhangsanx/p/10776855.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis与Zookeeper实现分布式锁的区别

Redis与Zookeeper实现分布式锁的区别 1.分布式锁解决方案 1.采用数据库 不建议 性能不好 jdbc 2.基于Redis实现分布式锁(setnx)setnx也可以存入key,如果存入key成功返回1,如果存入的key已经存在了,返回0. 3.基于Zookee…

JavaFX技巧12:在CSS中定义图标

当您是像我这样来自Swing的UI开发人员时,您很有可能仍在代码中直接设置图像/图标。 最可能是这样的: import javafx.scene.control.Label; import javafx.scene.image.ImageView;public class MyLabel extends Label {public MyLabel() {setGraphic(new…

被嫌弃的eval和with

前面的话 eval和with经常被嫌弃,好像它们的存在就是错误。在CSS中,表格被嫌弃,在网页中只是用表格来展示数据,而不是做布局,都可能被斥为不规范,矫枉过正。那关于eval和with到底是什么情况呢?本…

短信猫常用AT指令

AT指令短信猫通讯中起着重要的作用,能够通过AT指令控制手机的许多行为,包括拨叫号码、按键控制、传真、GPRS等。AT指令基本用法:1. 测试命令(Test Command)在AT指令后面加上“?”即构成测试命令。例如“ATCSCS?”会列举出所有支持的字符集。…

第八次点评

本周心得: 本周没有作业 ,批改的上周的作业。需求分析以及团队的明确分工是开发前准备的要素。本次批改主要侧重于需求分析的调研。 博客园地址https://www.cnblogs.com/zhaojh123/ 博客园点评博客: https://www.cnblogs.com/yanqignkui-123/…

JDBC、Tomcat为什么要破坏双亲委派模型?

问题一:双亲委派模型是什么 如果一个类加载器收到了加载某个类的请求,则该类加载器并不会去加载该类,而是把这个请求委派给父类加载器,每一个层次的类加载器都是如此,因此所有的类加载请求最终都会传送到顶端的启动类加…

JavaFX技巧8:美丽深层

如果要为JavaFX开发UI框架,请养成一种习惯,始终将自定义控件拆分为控件类和外观类。 来自Swing自己,这对我来说并不明显。 Swing还使用MVC概念并将实际的组件呈现委托给UI委托,但是扩展Swing的人们大多将其控件之一子类化&#xf…

dpdk之路-环境部署

dpdk实验环境部署 1、实验环境说明 vmware workstatioin 12 centos 7.5.1804 dpdk-stable-18.11.1 2、实验步骤 (1)虚拟机安装 http://vault.centos.org/7.5.1804/isos/x86_64/从链接下载CentOS-7-x86_64-DVD-1804.iso,安装时需要准备3张虚拟…

管理好我的业务人员

我所在的一家公司属于一家典型的以业务员为主的公司,没有业务员就无法生存下去的这样一家公司。但在平时的一些管理方面我经常会发现以下几点问题:1. 某些业务人员有时候认为天高皇帝远,我在外面工作,公司不可能派人跟踪管理的。2…

initial、inherit、unset、revert和all

前面的话 在CSS中,有4个关键字理论上可以应用于任何的CSS属性,它们是initial(初始)、inherit(继承)、unset(未设置)、revert(还原)。而all的取值只能是以上这4个关键字。本文将介绍initial、inherit、unset、revert和all initial 表示元素属性的初始默认…

基于知识图谱的医疗诊断系统论文

本作品禁止任何人/企业申请专利,禁止任何人使用本作品参加任何比赛或作为毕业设计,如使用本作品源码进行商业用途务必联系作者。 一.科学性 1.研究意义 信息科技经过 60 余年的发展,已经普及到社会生活的每一个角落。随着信息技术在国家治理、…

SpringBoot:SpringBoot简介

SpringBoot ...如今,有关SpringBoot的话题很多。 那么,SpringBoot是什么? SpringBoot是一个新的Spring产品组合项目,它通过大幅度减少所需的配置量来构建可立即投入生产的Spring应用程序。 Spring Boot通过基于运行时可用的类路径…

华为云(ECS)-linux服务器中-Ubuntu图形界面安装-解决root登录受限-VNCviwer/Teamviwer远程访问教程...

安装ubuntu-desktop 1.更新软件库 apt-get update2.升级软件 apt-get upgrade3.安装桌面 apt-get install ubuntu-desktop 解决root登录受限 华为云登录进去是guest用户,不能选择登录用户且不需要密码就即可登录。 登录进去会如下警告信息: 首先下载…

两列自适应布局的4种思路

前面的话 前面已经介绍过单列定宽单列自适应的两列布局,而两列自适应布局是指一列由内容撑开,另一列撑满剩余宽度的布局方式。本文将从float、table、flex和grid来介绍两列自适应布局的4种思路 float 【思路一】float 在单列定宽单列自适应的两列布局中…

机器学习中为什么使用one-hot编码

one-hot编码把分类数据转化为二进制格式,供机器学习使用。 转载于:https://www.cnblogs.com/xin-qing3/p/11447489.html

Java EE并发API教程

这是一个示例章节,摘自Francesco Marchioni编辑的WildFly上的实用Java EE 7开发 。 本章讨论了新的Java EE并发API(JSR 236) ,它概述了使用一组托管资源在Java EE容器上并行执行任务的标准方法。 为了描述如何在您的应用程序中使…

经桥科技与湖南文化艺术产业集团合力打造“网乐潇湘”

签约仪式现场 签约仪式现场 签约仪式现场 经网1月7日讯(记者 陈飞 曹亮) 湖南经桥网络科技有限公司与湖南文化艺术产业集团“网乐潇湘”项目签约仪式隆重举行。经桥科技董事长姜志强、湖南文化艺术产业集团总经理陈介辉等领导出席此次签约仪式。 经桥科技与湖南文化艺术产业集…

文本溢出text-overflow和文本阴影text-shadow

前面的话 CSS3新增了一些关于文本的样式,其中text-overflow文本溢出和text-shadow文本阴影有些特别。因为它们有对应的overflow溢出属性和box-shadow盒子阴影属性。本文将详细介绍这两个作用在文本上的溢出和阴影属性 文本溢出 一般地,人们一提到文本溢出…

python第十三天,函数的嵌套定义,global,nonlocal关键字的使用,闭包及闭包的运算场景,装饰器...

今日内容 1. 函数的嵌套定义 2.global,nonlocal关键字 3.闭包及闭包的运用场景 4.装饰器 函数的嵌套定义 1. 概念:在一个函数内部定义另一个函数 2 .为什么要有函数的嵌套定义: 1) 函数fn2想要直接使用fn1函数的局部变量,可以将fn…

glup打包代码不更新

一开始以为是缓存问题,清完缓存依旧不行。找到打包文件找到自己改的代码是否生效了。发现修改过的代码生效了,but 相同方法存在两个。方法一中是修改后的内容,方法二是未修改的内容。原因:在打包前将原文件复制了一个副本&#xf…