线程冲突案例演示

我们以银行取款经典案例来演示线程冲突现象。

银行取款的基本流程可以分为如下几个步骤。

(1)用户输入账户、密码,系统判断用户的账户、密码是否匹配。

(2)用户输入取款金额。

(3)系统判断账户余额是否大于或等于取款金额。

(4)如果余额大于或等于取款金额,则取钱成功;如果余额小于取款金额,则取钱失败。

/*** 账户类*/
class Account{//账号private String accountNo;//账户的余额private double balance;public Account(){}public Acount(String accountNo,double balance){this.acountNo = acountNo;this.balance = balance;}public String getAccountNo(){return accountNo;}public void setAccountNo(String accountNo){this.accountNo = accountNo;}public double getBalance(){return balance;}public void setBalance(double balance){this.balance = balance;}
}/*** 取款线程*/
class DrawThread implements Runnable {//账户对象private Account account;//取款金额private double drawMoney;public DrawThread(Account account,double drawMoney){this.account = account;this.drawMoney = drawMoney;}/*** 取款线程*/@Overridepublic void run(){//判断当前账户余额是否大于或等于取款金额if(this.account.getBalance() >= this.drawMoney){System.out.println(Thread.currentThread().getName()+" 取款成功!吐出钞票:"+this.drawMoney);try{Thread.sleep(1000);}catch(InterruptedException e){e.printStackTrace();}//更新账户金额this.account.setBalance(this.account.getBalance()-this.drawMoney);System.out.println("\t 余额为:"+this.account.getBalance());}else{System.out.println(Thread.currentThread().getName+" 取款失败,余额不足");}}
}public class TestDrawMoneyThread {public static void main(String[] args){Account account = new Account("1234",1000);new Thread(new DrawThread(account,800),"丈夫").start();new Thread(new DrawThread(account,800),"妻子").start();}
}

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

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

相关文章

JavaSE 面向对象程序设计进阶 IO 练习读取多个对象

练习读取多个对象 用序列化流将对象写入文件 import java.io.*; import java.nio.charset.Charset;public class Main {public static void main(String[] args) throws IOException, ClassNotFoundException {//序列化多个对象Person p1new Person("多多", 男,20)…

梧桐数据库:数据库产品中的自然语言语义分析技术

数据库产品中的自然语言语义分析技术是一项重要的自然语言处理技术,它涉及对自然语言文本进行深度理解和分析,从而识别文本中的实体、关系、情感等语义信息,并将这些信息转化为计算机可以理解和处理的形式。 一、自然语言语义分析技术的定义…

蓝牙 - Terminal I/O Service Specification

1, Introduction 1.1, Scope 通过该服务,终端 I/O 客户端设备可连接终端 I/O 服务器设备并与之交互,从而实现串行数据和 GPIO 状态信息的双向交流。 终端 I/O 服务公开本地 UART 数据和本地 GPIO 状态变化,并允许 GATT 客户向 GATT 服务器传…

Elasticsearch 基础查询语句汇总

Elasticsearch 基础查询语句汇总 准备条件指定id查询一指定id查询二指定多个id查询区间查询模糊查询多字段查询分页查询查询总数量 准备条件 以下查询操作都基于索引crm_clue来操作,索引已经建过了,本文主要讲Elasticsearch查询语句,下面开始…

DP学习——设计模式代码采集

学而时习之,温故而知新。 c++代码 1111https://blog.csdn.net/xushuilong/article/details/106962825 22222

电商之订单价税拆分实现方案

文章目录 案例数据实现思路1、计算出平均金额2、计算每个商品的金额 实现方案1、订单 order 实体2、订单明细 orderDetail 实体3、实现类4、测试启动5、实现结果 在做电商项目的时候,会遇到要对订单明细进行纳税金额拆分,即将税额拆分到每个商品上&#…

Android 自定义Edittext 和TextView 提示文字和填入内容不同的粗细组件

近期项目中又EditText 以及TextView 这两个组件需要用到提示文字 以及 填入文字要保持不同的粗细程度,所以记录一下 首先 是EditText 组件的自定义 BLEditText 继承的这个组件是一个三方的组件,可以在很大程度上减少drawable的编写,有兴趣的可以去相关的Git去看一下 点击查看,…

[leetcode]maximum-binary-tree 最大二叉树

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:TreeNode* constructMaximumBinaryTree(vector<int>& nums) {return construct(nums, 0, nums.size() - 1);}TreeNode* construct(const vector<int>& nums, int left, int right) {if …

人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解。回归分析是统计学和机器学习中的一种重要方法&#xff0c;用于研究因变量和自变量之间的关系。在机器学习中&#xff0c;回归算法被广泛应用于…

软件开发23种设计模式

一、设计模式分类 软件开发的23种模式&#xff0c;主要分类有创建型模式&#xff0c;结构型模式&#xff0c;行为型模式三种&#xff0c;相关分类如下&#xff1a; 设计模式是一种面向对象编程的思想&#xff0c;它是由Gamma等人在《设计模式&#xff1a;可复用面向对象软件的…

中新青年领导人交流营走进李良济,零距离感受中医药文化的魅力

7月8日晚&#xff0c;2024中新青年领导人交流营在苏州正式启动。该交流营主题为“青年创业和可持续发展”&#xff0c;由中华全国青年联合会、新加坡全国青年理事会主办&#xff0c;江苏省、北京市青年联合会与苏州市人民政府承办&#xff0c;苏州市青年联合会与苏州工业园区管…

k8s核心操作_Ingress统一网关入口_域名访问配置_ingress域名转发规则配置_根据域名访问不同服务---分布式云原生部署架构搭建026

上一节我们已经把 ingress 安装好了可以看到 kubectl get svc -A 可以看到 出现了ingress-nginx 的service,在ingre-nginx这个命名空间中,有两个,一个是 ingress-nginx-controller 开了两个一个是对应http,一个对应https 一个是 ingress-nginx-controller-admission 对…

unordered_map和set

前言&#xff1a;本篇文章继续分享新的容器unordered_map和set。前边我们分享过map和set&#xff0c;其底层为红黑树&#xff0c;而unordered_map和set的底层则为哈希表&#xff0c;因此在unordered_map和set的实现中&#xff0c;我们可以效仿许多在map和set的中就分享过的一些…

银河麒麟(Kylin)KYSEC使用

1.推荐使用方法 *.临时禁用指令: setstatus disable--禁用 注&#xff1a;执行reboot后系统会自动启动 2.选用指令&#xff1a; *.永久禁用指令&#xff1a; setstatus disable -p *.重启后,KYSEC还是处理关闭关状态。 *.使用如下指令启用&#xff1a;setstatus enable …

详细介绍一下TypeScript

TypeScript (TS) 是一种由微软开发和维护的开源编程语言。它是 JavaScript 的一个超集&#xff0c;意味着所有的 JavaScript 代码都可以在 TypeScript 中无需修改地运行。TypeScript 添加了可选的静态类型系统&#xff0c;这使得开发者能够在开发大型应用程序时更早地检测和修复…

【人生苦短,我学 Python】(13)通过python内置函数实现栈、队列

Python 所有文章传送门【Python】所有文章传送门 目录 简述 / 前言1. collections 的 deque 对象2. 栈2.1 栈操作-12.2 栈操作-2 3. 队列3.1 队列操作-13.2 队列操作-2 总结 简述 / 前言 上篇文章讲完了函数部分&#xff0c;这篇文章主要介绍如果通过内置函数&#xff08;模块…

Linux(一)线程——何为线程???Linux线程控制

文章目录 什么是线程&#xff1f;&#xff1f;&#xff1f;线程和进程的区别和联系Linux线程控制POSIX线程库创建线程线程等待线程终止线程分离 什么是线程&#xff1f;&#xff1f;&#xff1f; 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的…

python用selenium网页模拟时无法定位元素解决方法1

进行网页模拟时&#xff0c;有时我们明明可以复制出元素的xpath&#xff0c;但是用selenium的xpath click无法点击到元素。这种情况有几种原因&#xff0c;本文写其中一种——iframe 比如下图网址&#xff0c;第二行出现iframe&#xff0c;则往下的行内元素都会定位不到&#…

编程语言:创新的例子——解构技术与艺术的交融

编程语言&#xff1a;创新的例子——解构技术与艺术的交融 在数字化时代的浪潮中&#xff0c;编程语言作为技术领域的核心要素&#xff0c;其创新步伐从未停歇。本文将通过四个方面、五个方面、六个方面和七个方面&#xff0c;深入探讨编程语言创新的例子&#xff0c;揭示技术…

2024最新最全【Java】全栈,零基础入门到精通

Java基础 本文章是作者的学习笔记&#xff0c;帮助初学者快速入门&#xff0c;内容讲的不是很细&#xff0c;适合初学者&#xff0c;不定时更新。 目录 Java基础数据类型1.基本类型(primitive type)1-1 整数类型1-2 浮点类型1-3 字符类型1-4 boolean类型 2.引用数据类型3.类型…