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.的更多相关文章

  1. Java多线程编程(二)对象及变量的并发访问

    一.synchronized同步方法 1.方法内的变量为线程安全 “非线程安全”问题存在于“实例变量”中,如果是方法内部的私有变量,则不存在“非线程安全”问题,所得结果也就是“线程安全”的了. 示例: ...

  2. 【Linux C 多线程编程】互斥锁与条件变量

    一.互斥锁 互斥量从本质上说就是一把锁, 提供对共享资源的保护访问. 1) 初始化: 在Linux下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化: 对于静态 ...

  3. 谈谈装xp官方纯净系统屡次失败的深刻体会

    有木有,小硬盘小内存的电脑竟然装不了五六百m大小的xp却能装win7之类的而感到痛失,如果去装win7电脑果断卡死, 用了最流行的制作u盘启动的软件都不行, 任何直接点击安装也不行,点不了安装的那个选 ...

  4. 多线程:QueueUserWorkItem引发的闭包与变量共享

    //1. public void SaveModel(testmodel msg) { ThreadPool.QueueUserWorkItem(new WaitCallback(SaveModelT ...

  5. 多线程_先产后销_运行结果有BUG

    class Shop { public static void main(String[] args) { Things t=new Things(); Custom c=new Custom(t); ...

  6. 【腾讯Bugly干货分享】安卓单元测试:What, Why and How

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d28349101cd07a5404c415 Dev Club 是一个交流移动 ...

  7. 我是如何拿到蚂蚁金服 offer 的 ?

    阅读本文大概需要 5.6 分钟. 作者:翟洪毅 一.梦想和被拒 二.积累 三.结语   首先介绍一下投稿作者 翟洪毅,16年华理计算机本科毕业.在年前拿到了蚂蚁金服Java开发的offer,P6. 工 ...

  8. java多线程系列(二)---对象变量并发访问

    对象变量的并发访问 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我 ...

  9. Java多线程之非线程安全

    在Java多线程中我会重点总结五个如下的技术点: 1.非线程安全是如何出现的 2.synchronized对象监视器为Objec时的使用 3.synchronized对象监视器为Class时的使用 4 ...

随机推荐

  1. 获取Linux服务器基本信息的shell脚本

    测试运行环境: SLES12SP2 #!/bin/bash #系统名称:os_type=$(uname -o | awk '{print " | "$0}') #系统位数:32/6 ...

  2. find 以及linux 和windows 文件互传

    1. find  命令  查找文件或目录 同时也会用到的有 which   whereis   locate   经常也会遇到一些快捷键  ctrl  +  l  e  a  w  u  k     ...

  3. UE4 C++ Tips

    篇写的是关于UE4的C++方面的小技巧: 1.在构造函数里 //构建组件 RootComponent = CreateDefaultSubobject<USceneComponent>(T ...

  4. linux----磁盘介绍

    1.磁盘简图: 2.常见分区 mbr:主引导区,共512byte 扩展分区 逻辑分区

  5. python------模块定义、导入、优化 ------->re模块

    该部分内容引用自:http://www.cnblogs.com/alex3714/articles/5161349.html 谢谢原博主的文章,只是自己学习,无其他使用. re模块 常用正则表达式符号 ...

  6. mysql-The-server-quit-without-updating-PID-file

    mysql 编译后执行 /etc/init.d/mysqld start 启动失败 提示:"The server quit without updating PID file" 排 ...

  7. day43 数据库学习egon的博客 视图、触发器、事务、存储过程、函数

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  8. lch 儿童围棋课堂 初级篇1 ( (李昌镐 著))

    第1章 常用术语 第2章 吃子 第3章 死活:死活题初步 第4章 劫争 第5章 中盘 第6章 官子 第7章 形势判断 第8章 对杀技巧 第9章 手筋 第1章 常用术语 一 镇 在对方棋子上方隔一路落下 ...

  9. C# Monitor的Wait和Pulse方法使用详解

    [转载]http://blog.csdn.net/qqsttt/article/details/24777553 Monitor的Wait和Pulse方法在线程的同步锁使用中是比较复杂的,理解稍微困难 ...

  10. 20165308 学习基础和C语言基础调查

    学习基础和C语言基础调查 技能学习 我认为给学生具体的, 能实践的, 能马上看到因果关系的教材和练习, 是激发学生兴趣, 好奇心, 求知欲的好方法. -- 引用自<做中学> 老师博客中注重 ...