201711671103《Java程序设计》多线程的应用案例
两个人AB通过一个账户A在柜台取钱和B在ATM机取钱!
1.先创建一个Bank类
代码:package bank;
public class Bank {
static int money = 1000; // 假设一个账户有1000块钱
// 柜台Counter取钱的方法
public void Counter(int money) { // 参数是每次取走的钱
Bank.money -= money; //取钱后总数减少
System.out.println("A取走了" + money + "还剩下" + (Bank.money));
}
public void ATM(int money) {
Bank.money -= money;//取钱后总数减少
System.out.println("B取走了" + money + "还剩下" + (Bank.money));
}}
2.创建一个personA类
代码:package bank;
public class personA extends Thread{
Bank bank; // 创建银行对象
// 通过构造器传入银行对象,确保两个人进入的是一个银行
public personA(Bank bank) {
this.bank = bank;
}
//重写run方法,在里面实现使用柜台取钱
@Override
public void run() {
while (Bank.money >= 100) {
bank.Counter(100);// 每次取100块
try {sleep(100); // 取完休息0.1秒
} catch (InterruptedException e) {
e.printStackTrace();
}}}}
3.创建一个personB类
代码:package bank;
public class personB extends Thread {
Bank bank;// 创建银行对象
// 通过构造器传入银行对象,确保两个人进入的是一个银行
public personB(Bank bank) {
this.bank = bank;
}
// 重写run方法,在里面实现使用柜台取钱
@Override
public void run(){
while (Bank.money >= 200) {
bank.ATM(200);
try {
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}}}}
4.创建一个Mainclass类
代码:package bank;
public class MainClass {
//两个人AB通过一个账户A在柜台取钱和B在ATM机取钱
public static void main(String[] args) {
// 实例化一个银行对象
Bank bank = new Bank();
// 实例化两个人,传入同一个银行的对象
personA pA = new personA(bank);
personB pB = new personB(bank);
// 两个人开始取钱
pA.start();
pB.start();
}}
运行结果: