首页 > 其他分享 >线程安全问题:模拟取钱案例

线程安全问题:模拟取钱案例

时间:2023-06-07 14:14:53浏览次数:29  
标签:acc Account name money 案例 线程 double public 模拟

 

 

 

package Karl.Demo.money;

public class Test {
    public static void main(String[] args) {
        Account acc=new Account(100000);
        new DrawThread(acc,"小明").start();
        new DrawThread(acc,"小红").start();
    }
}
package Karl.Demo.money;

public class DrawThread extends Thread{
    private Account acc;
    public DrawThread(Account acc,String name){
        super(name);
        this.acc=acc;
    }
    @Override
    public void run() {
        //取钱
        acc.drawmoney(100000);
    }
}
package Karl.Demo.money;

public class Account {
    private double money;

    public Account() {
    }

    public Account(double money) {
        this.money = money;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public void drawmoney(double money) {
        String name=Thread.currentThread().getName();
        if (this.money>=money){
            System.out.println(name + "取钱成功");
            this.money-=money;
            System.out.println(name+"取钱过后,余额为:"+this.money);
        }else {
            System.out.println(name + "取钱失败,余额不足");
        }
    }
}

 

标签:acc,Account,name,money,案例,线程,double,public,模拟
From: https://www.cnblogs.com/Karl-hut/p/17463107.html

相关文章

  • JS 模拟 Java 动态数组(类)
     Code:/***动态数组*@class*/varDArray=(function(){/***数据数组*@type{*[]}*/letdata;/***数组中的元素个数*@type{number}*/letsize;/***调整数组容器大小*@param{number}new_capacity*/co......
  • Java多线程-工具篇-BlockingQueue
    前言:   在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认......
  • 多线程:线程的常用方法
             ......
  • 异步线程解决seata事务1000问题
    原因:seata1.5.0以下版本,事务执行sql超过1000,会抛出异常。解决方案:部分sql使用异步线程。实现方式:1、初始化异步线程池@Configuration@EnableAsyncpublicclassThreadAsyncConfigimplementsAsyncConfigurer{/***线程配置参数*/@Autowiredpr......
  • 多线程:线程创建方式二(匿名内部类写法)
        ......
  • k8s实战案例之部署redis单机和redis cluster
    1、在k8s上部署redis单机1.1、redis简介redis是一款基于BSD协议,开源的非关系型数据库(nosql数据库),作者是意大利开发者SalvatoreSanfilippo在2009年发布,使用C语言编写;redis是基于内存存储,而且是目前比较流行的键值数据库(key-valuedatabase),它提供将内存通过网络远程共享的一种服......
  • 线程池
    一、ThreadLocal 1、使得每个线程可以有自己的专属变量2、可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。importjava.text.SimpleDateFormat;importjava.util.Random;publicclassThreadLocalExampleimplementsRunnable{/......
  • 线程池的工作过程
    转载:https://www.bilibili.com/video/BV1Ka411i7qC/?spm_id_from=333.337.search-card.all.click&vd_source=46d50b5d646b50dcb2a208d3946b1598......
  • 正则解析案例01__网页图片爬取
    趣图地址:https://www.gxt8.cn/gxtp01/1.正则表达式提取网页图片源码: 2.提取页面所有的图片地址后续将其拼接: 3.获取图片二进制_定义图片存储路径_图片二进制写入图片路径: ......
  • 线程与进程
    一、线程与进程的区别1、进程是程序的一次执行过程,是程序运行的基本单位2、进程是比线程更小的执行单位,一个进程可以产生多个线程,多个线程共享进程的堆和方法区,每个线程都有自己独立的栈和程序计数器,因此线程之间切换的开销比进程切换小 二、并发与并行并发:同一时间段内,多......