多线程练习,深刻体会了一次变量的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 ...
随机推荐
- 一种简单的ELF加固方法
介绍一种ELF文件函数粒度的加固方法,可以有效防止对程序的静态分析.这是一种有源码加固方式,需要被加固程序中代码配合.加固流程如下: 1)读取ELF文件头,获取e_phoff和e_phnum2)通过E ...
- JavaBasic_10
JVM中的对一个对象的所有初始化动作,是javac在字节码文件中帮我们生成的 1.成员变量的显式初始化 2.初始化代码块(构造代码块) 3.构造方法 初始化静态的东西 在Java中,一个没有方法体的方 ...
- Nginx反向代理与Backend直接配置长连接
使用了Nginx的反向代理配置如下: upstream test{ keepalive 1; server 192.168.1.63:4000; } server { listen 4000; ser ...
- hdoj-4417(做法二 树状数组离线解法,对所有的查询先保存进行排序后有序的查询) 好腻害!
#include<cstdio> #include<cstring> #include<algorithm> using namespace std;; ; str ...
- {"errcode":48001,"errmsg":"api unauthorized}
微信公众号基础知识说明 网页授权获取微信用户信息:两种 scope 域 https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&am ...
- SQL-学习过程-001
1.了解什么是SQL和T-SQL 2.对数据库的对象的学习 数据库>>>数据表>>>字段>>>记录>>>视图>>&g ...
- Python知识点整理,基础3 - 字典操作
- day07 eclipse使用本地 库文件 访问HDFS
常用命令 1. hdfs dfsadmin -report 查看系统的各台机器状态 HDFS的概念和特性 首先,它是一个文件系统,用于存储文件,通过统一的命名空间——目录树来定位文件 其次,它是分 ...
- imrersize函数
imrersize函数: 用法:imresize(图像I,method,倍数) 'nearest'(默认值)最近邻插值'bilinear'双线性插值'bicubic'双三次插值 使用方法: clear ...
- Gravitee.io api gateway 试用
以前写过几篇关于整体介绍的以及 使用docker 运行的简单说明,有了docker-compose 环境我们可以 方便的进行测试使用了. 环境准备 docker-compose 文件 versio ...