之前学java的时候,学校老师由于课时问题,没有教我们多线程,最近学校外聘的企业教师给我们做实训要用到多线程,因此才初步了解多线程,以下这个案例只是介绍java代码优化,代码中有涉及多线程,但今天不对其讲解,只简单讲解代码优化的问题,希望对初学者有帮助。
大概案例:有PeasonA跟PeasonB在银行(bank)以同一个账号取钱,取钱方式可以为柜台取款和ATM机取款。银行账号总共有1000元,PeasonA每隔1秒取款100元,PeasonB每隔2秒取款150元,两人同时取款。当银行账户不足100或者150元时,取款结束。
1.优化前:
注意:在进行任何项目程序编码时,先把基本框架写出来。(1)程序入口类:Main.java
//程序入口类
public class Main {
//程序入口函数
public static void main(String[] args){
Bank bank=new Bank();
PersonA a=new PersonA(bank);
a.start();
PersonB b=new PersonB(bank);
b.start();
}
}
(2)银行类:Bank.java
//银行类
public class Bank {
public int money=10000;//钱
//柜台取钱函数
public void Counter(int num){
money-=num;
System.out.println("A取了:"+num+" 剩余钱数:"+money);
}
//ATM取钱函数
public void Atm(int num){
money-=num;
System.out.println("B取了:"+num+" 剩余钱数:"+money);
}
}
(3)personA类:PersonA.java
//A
public class PersonA extends Thread {
private Bank bank;
//构造函数
public PersonA(Bank bank){
this.bank=bank;
}
@Override
public void run(){
while(bank.money>=100){
bank.Counter(100);
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
(4)PersonB类:PersonB.java
public class PersonB extends Thread{
private Bank bank;
//构造函数
public PersonB(Bank bank){
this.bank=bank;
}
@Override
public void run(){
while(bank.money>=150){
bank.Atm(150);
try {
sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
2.优化后:
(1)程序入口类:
//程序入口类
public class Main {
//程序入口函数
public static void main(String[] args){
Person a=new Person("Tom","A",100,1000);
a.start();
Person b=new Person("Ru","B",150,2000);
b.start();
Person c=new Person("小敏","A",250,2500);
c.start();
}
}
(2)银行类:Bank.java
//银行类
public class Bank {
public static int money=10000;//钱
//柜台取钱函数
public static void Counter(String name,int num){
money-=num;
System.out.println(name+"取了:"+num+" 剩余钱数:"+money);
}
//ATM取钱函数
public static void Atm(String name,int num){
money-=num;
System.out.println(name+"取了:"+num+" 剩余钱数:"+money);
}
}
(3)Person类:person.java
//角色类
public class Person extends Thread {
private String name;
private String type;
private int num;
private int deltime;
public Person(String name,String type,int num,int deltime){
this.name=name;
this.type=type;
this.num=num;
this.deltime=deltime;
}
@Override
public void run(){
while(Bank.money>=num){
if(type=="A"){
Bank.Counter(name,num);
}else{
Bank.Atm(name,num);
}
try {
sleep(deltime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
运行效果:
具体代码可以在github上下载:https://github.com/whitedouble/whitedouble.git
ps:此案例来源于外聘老师的课堂案例讲解。
新手第一次写博客,有许多不足之处,请各位大佬指出,多多指教。