多线程练习,深刻体会了一次变量的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 ...
随机推荐
- Markdown显示反引号(`)
/********************************************************************** * Markdown显示反引号(`) * 说明: * 在 ...
- c++字符串前几位,后几位的截取
参考 1. https://blog.csdn.net/haijunsm/article/details/82733584 完
- day python calss08 深浅copy
一 join (格式: . join) 遍历列表把列表中的每一项用指定符号进行拼接.(把列表转成字符串0 # lst = ["汪峰", "吴君如", &q ...
- NYOJ 12:喷水装置(二)(贪心,区间覆盖问题)
12-喷水装置(二) 内存限制:64MB 时间限制:3000ms 特判: No 通过数:28 提交数:109 难度:4 题目描述: 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n ...
- BFS广度优先搜索 poj1915
Knight Moves Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 25909 Accepted: 12244 Descri ...
- RPC 原理
转载地址:你应该知道的 RPC 原理 在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司 ...
- hdu3338 Kakuro Extension 最大流
If you solved problem like this, forget it.Because you need to use a completely different algorithm ...
- putty登陆sourceforge.net(密钥的设置)
现在直接启动putty.exe是不能登陆sourceforge.net 的.按vps的方式,输入地址.用户名和密码后,程序就自动关闭.在登入前需要安装密匙,具体做法如下: 首先得生成一个SSH Key ...
- Mybatis二(高级部分)
1.输入映射和输出映射 a) 输入参数映射 b) 返回值映射 2.动态sql a) If标签 b) Where标签 c) Sql片 ...
- linux怎么不输入路径直接运行程序脚本
有时候我们会遇到一些程序压缩包,已解压无需安装就可以直接运行的那种,例如sendemail,就是直接把程序压缩包下载下来,解压后直接跑sendemail那个脚本就可以实现发送邮件功能 其实很简单,只需 ...