Java--银行账户存取款线程设计1(交互线程)
2016-05-17 16:51
836 查看
线程之间可能无关,也可能交互。
而线程的同步机制并发执行的交互线程间存在与时间有关的错误。
运行结果1:
wang账户,现有0.0,存入100.0,余额100.0
wang账户,现有100.0,取出100.0,余额0.0
wang账户,现有0.0,存入200.0,余额200.0
xu账户,现有0.0,存入100.0,余额100.0
运行结果2:
wang账户,现有0.0,存入100.0,余额100.0
wang账户,现有100.0,存入200.0,余额300.0
xu账户,现有0.0,存入100.0,余额100.0
wang账户,现有300.0,取出300.0,余额0.0
由运行结果可以看出,线程很乱
而线程的同步机制并发执行的交互线程间存在与时间有关的错误。
public class account { private String name; private double balance; public account(String name) { this.name = name; this.balance=0; } public String getName() { return name; } public double getBalance() { return balance; } // public void put(double value){ if(value>0){ this.balance=this.balance+value; } } public double get(double value){ if(value>0){ if(value<=balance){ this.balance=this.balance-value; }else{ value=this.balance; this.balance=0; } } return value; } }
public class save extends Thread{ private account a; private double value; public save(account a, double value) { this.a = a; this.value = value; } public void run() { double b=a.getBalance(); a.put(value); System.out.println(a.getName()+"账户,现有"+b+",存入" +value+",余额"+a.getBalance()); } }
public class fetch extends Thread{ private account a; private double value; public fetch(account a, double value) { this.a = a; this.value = value; } public void run() { double b=a.getBalance(); System.out.println(a.getName()+"账户,现有"+b+",取出" +a.get(value)+",余额"+a.getBalance()); } }
public class bank { public static void main(String[] args) { // account a1=new account("wang"); // save s1=new save(a1,100); // save s1=new save(new account("wang"),100); // s1.start(); account a1=new account("wang"); new save(a1,100).start(); new save(a1,200).start(); new fetch(a1,300).start(); new save(new account("xu"),100).start(); } }
运行结果1:
wang账户,现有0.0,存入100.0,余额100.0
wang账户,现有100.0,取出100.0,余额0.0
wang账户,现有0.0,存入200.0,余额200.0
xu账户,现有0.0,存入100.0,余额100.0
运行结果2:
wang账户,现有0.0,存入100.0,余额100.0
wang账户,现有100.0,存入200.0,余额300.0
xu账户,现有0.0,存入100.0,余额100.0
wang账户,现有300.0,取出300.0,余额0.0
由运行结果可以看出,线程很乱
相关文章推荐
- java发送email
- 【软件测试】Java中Selenium Webdriver的使用
- 创建完美SDK的10个技巧
- mybatis批量插入与批量更新。
- java实现ftp文件的上传与下载
- java中关于小数的四舍五入问题
- java学习个人笔记---静态内部类
- JAVA设计模式(10):结构型-组合模式(Composite)
- SpringMVC POST乱码和restful
- spring学习
- javaBean的写法
- JAVA设计模式(09):结构型-代理模式(Proxy)
- JAVA拾遗录
- spring从头开始(四)---AOP
- JAVA拾遗录
- JavaSE入门学习41:文件传输基础之二进制基础
- myeclipse中使用maven前常见错误及解决办法
- JAVA设计模式(08):结构型-享元模式(Flyweight)
- JAVA属性和成员的可见性
- spring mvc json date字符串格式化的问题