• Java多线程之使用ATM与柜台对同一账户取钱


    钱数要设置成静态的变量,两种取钱方式操作的是同一个银行账户!

    废话不多说,直接上代码。注释写的都很详细!!!

    package com.thread.multi2;
    
    public class Bank {
        // 假设一个账户有1000块钱
        static int money = 1000;
    
        // 柜台取钱的方法
        public synchronized void getCounter(int money1) {
            Bank.money -= money1;// 取钱后总数减少
            System.out.println("A取走了" + money1 + "还剩下" + Bank.money);
        }
    
        // ATM取钱的方法
        public synchronized void getATM(int money2) {// 参数是每次取走的钱
            Bank.money -= money2;// 取钱后总数减少
            System.out.println("B取走了" + money2 + "还剩下" + Bank.money);
        }
    
    }
    package com.thread.multi2;
    
    public class PersonA extends Thread {
        // 创建银行对象
        Bank bank;
    
        // 通过构造器传入银行对象,确保两个人进入的是一个银行
        public PersonA(Bank bank) {
            this.bank = bank;
        }
    
        // 重写run方法,在里面使用柜台取钱
    
        @Override
        public void run() {
            while (Bank.money >= 100) {
                bank.getCounter(100);// 每次取走100块
                try {
                    sleep(100);// 取完休息0.1秒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
    
            }
    
        }
    
    }
    package com.thread.multi2;
    
    public class PersonB extends Thread {
        // 创建银行对象
        Bank bank;
    
        // 通过构造器传入银行对象,确保两个人进入的是一个银行
        public PersonB(Bank bank) {
            this.bank = bank;
        }
    
        // 重写run方法,在里面使用使用ATM取钱
    
        @Override
        public void run() {
            while (Bank.money >= 200) {
                bank.getATM(200);// 每次取钱200块
                try {
                    sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
    
            }
        }
    
    }
    package com.thread.multi2;
    
    public class MainClass {
        public static void main(String[] args) {
            Bank bank = new Bank();
            PersonA pA = new PersonA(bank);
            PersonB pB = new PersonB(bank);
            // 两个人开始取钱
            pA.start();
            pB.start();
        }
    }
  • 相关阅读:
    瀑布流布局——JS+绝对定位
    浏览器事件的思考
    css的hack详解
    主流浏览器的Hack写法
    [HTML&CSS] 未知高度多行文本垂直居中
    HTML标签的默认样式列表
    推荐的 CSS 书写顺序
    高效整洁CSS代码原则 (上)
    高效整洁CSS代码原则 (下)
    Xcode升级导致插件失效的解决办法
  • 原文地址:https://www.cnblogs.com/zhanzhuang/p/8890665.html
Copyright © 2020-2023  润新知