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 audit安全审计工具

    /********************************************************************** * Linux audit安全审计工具 * 说明: * ...

  2. cat命令合并多个txt文件

    cat是concatenate的缩写,意为串联,之前经常看到别人在用cat命令,没有细究 cat命令两个常用的用法是: cat file.txt能够将txt中的内容显示出来 cat file1.txt ...

  3. 田螺便利店—PyCharm安装第三方库

    PyCharm安装第三方库是十分方便的,无需pip或其他工具,平台就自带了这个功能而且操作十分简便.如下: 1. 打开软件,点击左上角“文件(File)”—>“设置(setting)”: 2. ...

  4. arcgis server备份还原过程

    一.备份过程 1.找到已经安装的arcgis server安装目录,并找到备份工具: 2.快捷键win + R启动cmd,将备份工具文件拖入cmd窗口,enter 3. 通过backup.py脚本进行 ...

  5. K - FatMouse and Cheese

    最近一直在写dp,然后别的就啥也不管了(wtcl),很明显的最简单的搜索题竟然卡了,一开始的思路是每一个格子都只能是从四周的格子转化过来的,只要找到四周最大的那个那么dp[i][j]=max+a[i] ...

  6. LSOF查看linux中文件打开情况

    如何查看linux中文件打开情况 前言 我们都知道,在linux下,“一切皆文件”,因此有时候查看文件的打开情况,就显得格外重要,而这里有一个命令能够在这件事上很好的帮助我们-它就是lsof. lin ...

  7. 【HDOJ4635】【Tarjan缩点+思维】【经典】

    http://acm.hdu.edu.cn/showproblem.php?pid=4635 Strongly connected Time Limit: 2000/1000 MS (Java/Oth ...

  8. 《DSP using MATLAB》Problem 6.5

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  9. oracle Awr报告

    Select DBID,INSTANCE_NUMBER,SNAP_ID,TO_CHAR(END_INTERVAL_TIME,'YYYY-MM-DD HH24:MM:SS') AS END_TIME,T ...

  10. MySQL5.6在线DDL不锁表(在线添加字段)

    解答你也看一下MySQL5.6在线DDL不锁表,现在我有一张1亿的表,需要增加一个字段,假如我让你去增加这个字段,你应该注意什么,具体怎么操作? 操作如下:1.注意磁盘空间(临时表目录 参数 tmpd ...