返回顶部
首页 > 资讯 > 后端开发 > Python >Java利用多线程模拟银行系统存钱问题
  • 225
分享到

Java利用多线程模拟银行系统存钱问题

2024-04-02 19:04:59 225人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录多线程6(模拟银行系统存钱)1.题目2.解题思路3.代码详解多线程6(模拟银行系统存钱) 1.题目 模拟一个简单的银行系统,使用两个不同的线程向同一个账户存钱。 实现:使用syn

线程6(模拟银行系统存钱)

1.题目

模拟一个简单的银行系统,使用两个不同的线程向同一个账户存钱。

实现:使用synchronized关键字,将存钱的方法修改成同步的。

2.解题思路

创建一个类:SynchronizedBankFrame,继承JFrame类

写一个内部类Bank

  • 定义一个account变量,来表示账户。
  • deposit():一个存钱的方法
  • getAccount():显示账户余额的方法。

写一个内部类Transfer,实现Runnable接口

在run方法中实现向账户存钱的功能。

同步方法就是用synchronized关键字修饰的方法。

jdk为每个JAVA对象配置了内置,如果方法使用synchronized关键字修饰,内置锁就会保护整个方法。

3.代码详解

SynchronizedBankFrame

package com.xiaoxuzhu;
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import javax.swing.jscrollPane;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.GridLayout;
import javax.swing.JLabel;
import javax.swing.SwinGConstants;
import java.awt.Font;
import javax.swing.UIManager;


public class SynchronizedBankFrame extends JFrame {

    
    private static final long serialVersionUID = 2671056183299397274L;
    private JPanel contentPane;
    private JTextArea thread1TextArea;
    private JTextArea thread2TextArea;

    
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (Throwable e) {
            e.printStackTrace();
        }
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    SynchronizedBankFrame frame = new SynchronizedBankFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    
    public SynchronizedBankFrame() {
        setTitle("使用Synchronized实现线程同步");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(new BorderLayout(0, 0));

        JPanel buttonPanel = new JPanel();
        contentPane.add(buttonPanel, BorderLayout.SOUTH);

        JButton startButton = new JButton("开始存钱");
        startButton.setFont(new Font("微软雅黑", Font.PLAIN, 16));
        startButton.addActionListener(new ActionListener() {
            public void actionPerfORMed(ActionEvent arg0) {
                do_button_actionPerformed(arg0);
            }
        });
        buttonPanel.add(startButton);

        JPanel processPanel = new JPanel();
        contentPane.add(processPanel, BorderLayout.CENTER);
        processPanel.setLayout(new GridLayout(1, 2, 5, 5));

        JPanel thread1Panel = new JPanel();
        processPanel.add(thread1Panel);
        thread1Panel.setLayout(new BorderLayout(0, 0));

        JLabel thread1Label = new JLabel("一号线程");
        thread1Label.setFont(new Font("微软雅黑", Font.PLAIN, 16));
        thread1Label.setHorizontalAlignment(SwingConstants.CENTER);
        thread1Panel.add(thread1Label, BorderLayout.NORTH);

        JScrollPane thread1ScrollPane = new JScrollPane();
        thread1Panel.add(thread1ScrollPane, BorderLayout.CENTER);

        thread1TextArea = new JTextArea();
        thread1TextArea.setFont(new Font("微软雅黑", Font.PLAIN, 16));
        thread1ScrollPane.setViewportView(thread1TextArea);

        JPanel thread2Panel = new JPanel();
        processPanel.add(thread2Panel);
        thread2Panel.setLayout(new BorderLayout(0, 0));

        JLabel thread2Label = new JLabel("二号线程");
        thread2Label.setFont(new Font("微软雅黑", Font.PLAIN, 16));
        thread2Label.setHorizontalAlignment(SwingConstants.CENTER);
        thread2Panel.add(thread2Label, BorderLayout.NORTH);

        JScrollPane thread2ScrollPane = new JScrollPane();
        thread2Panel.add(thread2ScrollPane, BorderLayout.CENTER);

        thread2TextArea = new JTextArea();
        thread2TextArea.setFont(new Font("微软雅黑", Font.PLAIN, 16));
        thread2ScrollPane.setViewportView(thread2TextArea);
    }

    protected void do_button_actionPerformed(ActionEvent arg0) {
        Bank bank = new Bank();
        Thread thread1 = new Thread(new Transfer(bank, thread1TextArea));
        thread1.start();
        Thread thread2 = new Thread(new Transfer(bank, thread2TextArea));
        thread2.start();
    }

    private class Transfer implements Runnable {
        private Bank bank;
        private JTextArea textArea;

        public Transfer(Bank bank, JTextArea textArea) {// 初始化变量
            this.bank = bank;
            this.textArea = textArea;
        }

        public void run() {
            for (int i = 0; i < 10; i++) {// 向账户中存入10次钱
                bank.deposit(10);// 向账户中存入10块钱
                String text = textArea.getText();// 获得文本域中的文本
                // 在文本域中显示账户中的余额
                textArea.setText(text + "账户的余额是:" + bank.getAccount() + "\n");
            }
        }
    }

    private class Bank {
        private int account = 100;// 每个账户的初始金额是100元

        public synchronized void deposit(int money) {// 向账户中存入money元
            account += money;
        }

        public int getAccount() {// 查询账户余额
            return account;
        }
    }

}

到此这篇关于Java利用多线程模拟银行系统存钱问题的文章就介绍到这了,更多相关Java多线程银行存钱内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java利用多线程模拟银行系统存钱问题

本文链接: https://lsjlt.com/news/166042.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java利用多线程模拟银行系统存钱问题
    目录多线程6(模拟银行系统存钱)1.题目2.解题思路3.代码详解多线程6(模拟银行系统存钱) 1.题目 模拟一个简单的银行系统,使用两个不同的线程向同一个账户存钱。 实现:使用syn...
    99+
    2024-04-02
  • Java多线程模拟银行系统存钱问题详解
    目录一、题目描述二、解题思路三、代码详解多学一个知识点一、题目描述 题目:模拟一个简单的银行系统,使用两个不同的线程向同一个账户存钱。 实现:使用特殊域变量volatile实现同步。...
    99+
    2024-04-02
  • java多线程模拟交通灯管理系统
    本文实例为大家分享了java多线程模拟交通灯管理系统的具体代码,供大家参考,具体内容如下 一、项目业务逻辑分析 项目需求:模拟实现十字路口的交通灯管理系统逻辑,要求如下: ...
    99+
    2024-04-02
  • Java多线程编程小实例模拟停车场系统
    下面分享的是一个Java多线程模拟停车场系统的小实例(Java的应用还是很广泛的,哈哈),具体代码如下:Park类public class Park {boolean []park=new boolean[3]; public bool...
    99+
    2023-05-30
    java 多线程 ava
  • java多线程之火车售票系统模拟实例
    1.前言为了学习多线程共享与通信,我们模拟一个火车售票系统,假设有10张火车票,三个窗口(也就是三个线程)同时进行售票。2.非同步代码package com.tl.skyLine.thread; public class SellTic...
    99+
    2023-05-31
    java 多线程 模拟售票
  • Java多线程实现模拟12306火车站售票系统
    该系统一共涉及到3个类: 车票(Ticket) 12306系统(System12306) 售票窗口(Window) 车票类,涉及三个属性: 起始...
    99+
    2024-04-02
  • 怎么在Java中利用多线程模拟站点售票
    怎么在Java中利用多线程模拟站点售票?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、实验题目二、分析哦吼,这次的实验题目是一道非常经典的多线程买票问题。题目要求我们创建...
    99+
    2023-06-15
  • Java多线程如何实现模拟12306火车站售票系统
    这篇文章主要介绍Java多线程如何实现模拟12306火车站售票系统,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!该系统一共涉及到3个类:车票(Ticket)12306系统(System12306)售票窗口(Windo...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作