多线程练习,深刻体会了一次变量的BUG.
- package ltb20180106;
- public class TestBankThread {
- private int deposit=0;//注意全局变量的摆放.
- public TestBankThread() {
- }
- class BankThread implements Runnable{
- public BankThread() {
- }
- public void setDeposit(int money) {
- deposit+=money;
- }
- public int getMoney(int m) {
- deposit=deposit-m;
- if(deposit<0) {
- System.out.println("ATM余额不足!!!"+deposit);
- }
- return m;
- }
- public int getBank() {
- return deposit;
- }
- public void run() {
- this.setDeposit(200);
- System.out.println("ATM现有存款"+this.getBank());
- }
- }
- class A extends BankThread {
- private int a=0;
- public A() {
- }
- public void setA(int i) {
- a=a+i;
- }
- public int getA() {
- return a;
- }
- public void run() {
- this.setA(super.getMoney(200));
- System.out.println("A从ATM取出:"+this.getA());
- System.out.println("ATM现在是"+this.getBank());
- this.setA(100);
- System.out.println("在存入A100元最后是:"+a);
- super.setDeposit(getA());
- System.out.println("存入ATM后:"+super.getBank());
- }
- }
- class B extends BankThread {
- private int b=0;//余额
- private int k=0;//取款数额
- public B() {
- }
- public void setB(int i) {
- b=b+i;
- }
- public int getB(int j) {
- b=b-j;
- if(j>b) {
- System.out.println("类B:余额不足了");
- }
- k=j;
- return j;
- }
- public int getB() {
- return b;
- }
- public int getK() {
- return k;
- }
- public void run() {
- this.setB(super.getMoney(300));
- System.out.println("B从ATM取走"+this.getB()+"元");
- this.getB(50);
- super.setDeposit(this.getB());
- System.out.println("B取款"+this.getK()+"元,花掉了.");
- System.out.println("ATM当前存款:"+super.getBank());
- }
- }
- public static void main(String[] args) {
- TestBankThread tb=new TestBankThread();
- Thread t1=new Thread(tb.new BankThread());
- t1.start();
- Thread t2=new Thread(tb.new A());
- t2.start();
- Thread t3=new Thread(tb.new B());
- t3.start();
- }
- }
多线程练习,深刻体会了一次变量的BUG.的更多相关文章
- Java多线程编程(二)对象及变量的并发访问
一.synchronized同步方法 1.方法内的变量为线程安全 “非线程安全”问题存在于“实例变量”中,如果是方法内部的私有变量,则不存在“非线程安全”问题,所得结果也就是“线程安全”的了. 示例: ...
- 【Linux C 多线程编程】互斥锁与条件变量
一.互斥锁 互斥量从本质上说就是一把锁, 提供对共享资源的保护访问. 1) 初始化: 在Linux下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化: 对于静态 ...
- 谈谈装xp官方纯净系统屡次失败的深刻体会
有木有,小硬盘小内存的电脑竟然装不了五六百m大小的xp却能装win7之类的而感到痛失,如果去装win7电脑果断卡死, 用了最流行的制作u盘启动的软件都不行, 任何直接点击安装也不行,点不了安装的那个选 ...
- 多线程:QueueUserWorkItem引发的闭包与变量共享
//1. public void SaveModel(testmodel msg) { ThreadPool.QueueUserWorkItem(new WaitCallback(SaveModelT ...
- 多线程_先产后销_运行结果有BUG
class Shop { public static void main(String[] args) { Things t=new Things(); Custom c=new Custom(t); ...
- 【腾讯Bugly干货分享】安卓单元测试:What, Why and How
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d28349101cd07a5404c415 Dev Club 是一个交流移动 ...
- 我是如何拿到蚂蚁金服 offer 的 ?
阅读本文大概需要 5.6 分钟. 作者:翟洪毅 一.梦想和被拒 二.积累 三.结语 首先介绍一下投稿作者 翟洪毅,16年华理计算机本科毕业.在年前拿到了蚂蚁金服Java开发的offer,P6. 工 ...
- java多线程系列(二)---对象变量并发访问
对象变量的并发访问 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我 ...
- Java多线程之非线程安全
在Java多线程中我会重点总结五个如下的技术点: 1.非线程安全是如何出现的 2.synchronized对象监视器为Objec时的使用 3.synchronized对象监视器为Class时的使用 4 ...
随机推荐
- 倍增求lca
/* 节点维护的信息多样 如果用树状数组维护到根节点的边权或者点权, 可以直接插入点权和边权值,不需要预处理, 但是记得一定要使用ot[]消除影响.即差分. Housewife Wind 这个坑踩得死 ...
- ZOJ 1002:Fire Net(DFS+回溯)
Fire Net Time Limit: 2 Seconds Memory Limit: 65536 KB Suppose that we have a square city with s ...
- Prime Test(POJ 1811)
素数判定的模板题,运用米勒-罗宾素数判定,然后用Pollard_Rho法求出质因数.使用相应的模板即可,不过注意存储质因子的数组需要使用vector,并且使用long long类型存储,不然存储不下, ...
- Linux,IDS入侵防御系统
https://www.comparitech.com/net-admin/network-intrusion-detection-tools/11 2018年的顶级入侵检测工具 https://op ...
- linux磁盘检测和修复
显示磁盘和闪存的信息,以及分区信息 [root@bogon shell]# fdisk -l Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 s ...
- JDBC事务的处理-----模拟银行转账业务
定义: 数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成. 概要: 一个数据库事务通常包含了一个序列的对数据库的读/写操作.它的存在包含有以下两个目的: ...
- UWP --- Display Content 显示基础内容
UWP前端使用的是XAML语言, 这门语言和Xamarin Forms 是比较类似(当你开发多了之后会发现StackPanel和StackLayout傻傻的分不清) 言归正传. UWP中显示内容最简单 ...
- taro 知识点
taro 的包: 包名 说明 @tarojs/redux Redux for Taro @tarojs/redux-h5 Forked react-redux for taro @tarojs/plu ...
- vue 和 react 组件间通信方法对比
vue 和 react 组件间通信方法对比: 通信路径 vue的方法 react的方法 父组件 => 子组件 props(推荐).slot(推荐).this.$refs.this.$childr ...
- OpenGL纹理
如果不用头文件,把所有东西堆在同一个cpp文件中,会出现“超出GPU内存的错误!” 1 //我们自己的着色器类 #ifndef SHADER_H #define SHADER_H #include & ...