zoukankan      html  css  js  c++  java
  • java中的synchronized : 模拟取款

    1.定义账户类:

    public class Account {
    private int balance = 500;

    public int getBalance() {
    return balance;
    }

    public void setBalance(int balance) {
    this.balance = balance;
    }

    //取款
    public void withdraw (int amount){
    balance = balance - amount;
    }

    }

    ------------------------------------

    2.定义取款类:

    public class TestAmount implements Runnable {
    private Account acct = new Account();

    public void run() {
    for (int i = 0; i < 5; i++) {
    makeWithdrawal(100);

    if(acct.getBalance() < 0){
    System.out.println("账户透支了!");
    }
    }

    }

    private synchronized void makeWithdrawal(int amt){
    if(acct.getBalance() >= amt){
    System.out.println(Thread.currentThread().getName()+"准备取款");
    try {
    Thread.sleep(500); //0.5秒后实现取款
    } catch (Exception e) {
    }
    // 如果钱足够,则取款
    acct.withdraw(amt);
    System.out.println(Thread.currentThread().getName()+"完成取款");
    }else{
    System.out.println("余额不足以支付: "+Thread.currentThread().getName()+"的取款,余额为:"+acct.getBalance());
    }
    }

    }

    -----------------------------------------------

    3.定义测试类: 

    public class TestWithDraw {
    public static void main(String[] args) {
    TestAmount tc= new TestAmount();
    Thread one = new Thread(tc);
    Thread two = new Thread(tc);
    one.setName("张三");
    two.setName("李四");

    one.start();
    two.start();


    }

    }

    执行效果:

  • 相关阅读:
    JS中声明变量的细节问题
    你不知道的var! 细节
    读书笔记:对象的属性
    手写new操作符
    slice
    全相等函数 isEqual
    几个面试题
    全相等函数
    剑指 Offer 29. 顺时针打印矩阵
    剑指 Offer 28. 对称的二叉树
  • 原文地址:https://www.cnblogs.com/qiyc/p/6894942.html
Copyright © 2011-2022 走看看