首页 > 其他分享 >银行存取款多线程

银行存取款多线程

时间:2024-09-25 18:21:37浏览次数:9  
标签:Thread 存取款 int money 银行 new 多线程 public bank

import java.util.Random;
import java.lang.*;
/**
 * 银行存取款
 *
 * @author Laccoliths
 */
public class Bank {
    private int count = 0;

    /**
     * 存钱
     * @param money:存钱数
     */
    public synchronized void addMoney(int money) {
        count += money;
        System.out.print("在"+Thread.currentThread().getName()+"上存" + money);
    }

    /**
     * 取钱
     * @param money:取钱数
     */
    public synchronized void getMoney(int money){

            if (count >= money) {

                    count -= money;
                    System.out.print("在" + Thread.currentThread().getName() + "取" + money);

            }else {
                System.out.print("余额不足");
            }

    }

    /**
     * 显示余额
     */
    public synchronized void show(){

            System.out.println(",余额为"+count);


    }
}
class getMoney implements Runnable{
    // Bank对象
    private Bank bank;
    // 取钱数
    private int money;

    /**
     * 构造方法
     * @param bank:bank对象
     * @param money:取钱数
     */
    public getMoney(Bank bank,int money){
        this.bank = bank;
        this.money = money;
    }
    @Override
    public void run() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        synchronized (this){
            bank.getMoney(money);
            bank.show();
        }


    }
}
class saveMoney implements Runnable{
    private Bank bank;
    private int money;
    /**
     * 构造方法
     * @param bank:bank对象
     * @param money:存钱数
     */
    public saveMoney(Bank bank,int money){
        this.bank = bank;
        this.money = money;
    }
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (this){
                bank.addMoney(money);
                bank.show();
            }
        }

    }
}
class Test{
    public static void main(String[] args) {
        Bank bank = new Bank();
        // ATM存钱
        Thread t1 = new Thread(new saveMoney(bank,new Random().nextInt(100)),"ATM");
        // ATM取钱
        Thread t2 = new Thread(new getMoney(bank,new Random().nextInt(100)),"ATM");
        // 银行柜台存钱
        Thread t3 = new Thread(new saveMoney(bank,new Random().nextInt(100)),"银行柜台");
        // 银行柜台取钱
        Thread t4 = new Thread(new getMoney(bank,new Random().nextInt(100)),"银行柜台");
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}

标签:Thread,存取款,int,money,银行,new,多线程,public,bank
From: https://blog.51cto.com/Laccoliths/12111479

相关文章

  • Linux 基础入门操作 第十章 多线程实现
    10线程介绍线程是进程的一条执行路径。每个线程共享其所附属的进程的所有的资源,包括打开的文件、页表(因此也就共享整个用户态地址空间)、信号标识及动态分配的内存等等。线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一物理内存空间......
  • 2024下半年银行从业初级个人理财、法律法规押题5套 免费速领
    马上又到银行从业考试时间了,各位小伙伴抓紧行动起来,免费速领!!!地址:[https://pan.quark.cn/s/118d640961ab](https://pan.quark.cn/s/118d640961ab)......
  • 【Linux】多线程:线程池的创建、日志类、RAII互斥锁、单例模式:饿汉方式与懒汉方式
    目录一、线程池概念二、线程的封装及线程池类成员变量的介绍 三、单例模式饿汉方式(EagerInitialization)懒汉方式(LazyInitialization)四、RAII类型的互斥锁 五、日志类的实现六、简单的任务类创建七、线程池的创建 一、线程池概念线程池(ThreadPool)是一种基于......
  • JavaEE——多线程
    接着上篇博客我们已经学习了进程的相关概念,了解到进程里面的相关重要属性,那么这篇博客呢我们要学习一个新的知识点——线程!一、引入进程的目的首先引入进程这个概念,是为了解决“并发编程”这样的问题。因为CPU再往小了做,比较困难了,这是因为CPU进入了多核心的时代,要想进一......
  • JavaEE——多线程Thread 类及常见方法
    目录 一、Thread(Stringname)二、是否后台线程isDeamon()三、是否存活isAlive()四、run()方法和start()方法的区别五、中断线程法一:法二:六、线程等待join()七、线程休眠sleep()一、Thread(Stringname)定义:这个东西是给线程(thread对象)起一个名字。起一个......
  • Java多线程
    文章目录前言1实现多线程1.1多线程概述1.2多线程的实现方式1.3线程休眠1.4线程优先级1.5守护线程2线程同步2.1同步代码块2.2Lock锁2.3死锁3生产者消费者3.1生产者和消费者模式概述3.2阻塞队列基本使用3.3阻塞队列实现等待唤醒机制前言"劝君莫惜金......
  • 万象更新 Html5 - h5: h5 通过 web worker 实现多线程
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-h5:h5通过webworker实现多线程示例如下:h5\webWorker\worker.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>通过web......
  • 万象更新 Html5 - h5: h5 通过 web worker 实现多线程(演示如何转移数据的所有权)
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-h5:h5通过webworker实现多线程(演示如何转移数据的所有权)示例如下:h5\webWorker\worker_transferable.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"&......
  • ARS展览项目(七)——C++多线程:Socket+表情识别整合
    说明一下我这边做表情识别和Socket,表情识别要实时,Socket要一直监听表情识别的结果,那么就只好用C++多线程来解决这个“两个功能一直并且同时运行”的问题。否则,如果是单线程的话,只能运行表情识别一段时间,切换发送一段时间,又切换回来,这样没有多线程好。还要说解决的难点写成多......
  • ARS展览项目(七)——C-多线程:Socket-表情识别整合
    说明一下我这边做表情识别和Socket,表情识别要实时,Socket要一直监听表情识别的结果,那么就只好用C++多线程来解决这个“两个功能一直并且同时运行”的问题。否则,如果是单线程的话,只能运行表情识别一段时间,切换发送一段时间,又切换回来,这样没有多线程好。还要说解决的难点写成多......