iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java多线程之简单模拟售票功能
  • 242
分享到

Java多线程之简单模拟售票功能

2024-04-02 19:04:59 242人浏览 薄情痞子

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

摘要

一、创建 二、完整代码 package com.ql; import lombok.SneakyThrows; import okHttp3.Call; import okh

一、创建

在这里插入图片描述

二、完整代码


package com.ql;

import lombok.SneakyThrows;
import okHttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;

public class Mythread extends Thread {
    public Mythread(String name) {
        super(name);
    }

    @SneakyThrows
    @Override
    public void run() {
        for (; ; ) {
            //的状态是默认是打开状态
            //获取锁的状态
            int lockStatus = this.findLockStatus();
            if (lockStatus == 0) {
                //修改锁的状态 =>>锁定
                this.locked();
                //获取总票数
                int tickets = this.findTickets();
                //剩余票数
                int i = this.remainVotes();
                //判断票数
                if (tickets < 1) {
                    //已售卖完 跳出循环
                    break;
                } else {
                    //卖一张票
                    int remainVotes = this.saleOneTicket();
                    System.out.println(this.getName() + "当前的票数:" + tickets);
                    System.out.println(this.getName() + "售票后:" + remainVotes);
                    //  释放锁
                    this.unlock();
                }
            }
        }


    }

    
    private int remainVotes() throws IOException, InterruptedException {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url("http://localhost:8080/lock/remainVotes").build();
        Call call = okHttpClient.newCall(request);
        Response response = call.execute();

        String string = response.body().string();
        int ticketsVote = Integer.parseInt(string);
        return ticketsVote;
    }

    
    private void unlock() throws IOException {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url("http://localhost:8080/lock/unlock").build();
        Call call = okHttpClient.newCall(request);
        Response response = call.execute();
    }

    
    private int saleOneTicket() throws IOException {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url("http://localhost:8080/lock/saleOneTicket").build();
        Call call = okHttpClient.newCall(request);
        Response response = call.execute();
        String string = response.body().string();
        int remainVotes = Integer.parseInt(string);
        return remainVotes;
    }

    
    private int findLockStatus() throws IOException {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url("http://localhost:8080/lock/findLock").build();
        Call call = okHttpClient.newCall(request);
        Response response = call.execute();
        String string = response.body().string();
        int lockStatus = Integer.parseInt(string);
        return lockStatus;
    }

    
    private int locked() throws IOException {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url("http://localhost:8080/lock/locked").build();
        Call call = okHttpClient.newCall(request);
        Response response = call.execute();
        String string = response.body().string();

        int lockStatus = Integer.parseInt(string);
        return lockStatus;
    }


    
    private int findTickets() throws IOException {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url("http://localhost:8080/lock/findTickets").build();
        Call call = okHttpClient.newCall(request);
        Response response = call.execute();
        String string = response.body().string();
        Integer tickets = Integer.parseInt(string);
        return tickets;
    }
}


package com.ql;

import org.springframework.WEB.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/lock")
public class ClientService {
    
    private static Integer tickets = 100;

    
    private static Integer lockStatus = 0;

    
    @RequestMapping("/saleOneTicket")
    public Integer saleOneTicket() {
        return tickets = tickets - 1;
    }

    
    @RequestMapping("/findTickets")
    public Integer findTickets() {
        return tickets;
    }

    
    @RequestMapping("/findLock")
    public synchronized Integer findLock() {
        Integer lock=lockStatus;
        //改变锁状态,使线程串行执行
        this.locked();
        return lock;
    }

    
    @RequestMapping("/locked")
    public synchronized int locked() {
        //更改锁的状态为1(上锁),避免多个线程同时获取锁的状态都为0(未上锁),从而导致线程安全问题
        lockStatus = 1;
        return lockStatus;
    }

    
    @RequestMapping("/unlock")
    public synchronized int unlock() {
        return lockStatus = 0;
    }

    
    @RequestMapping("/remainVotes")
    public int remainVotes() {

        return tickets;
    }

}

三、流程图解析

在这里插入图片描述

到此这篇关于Java多线程之简单模拟售票功能的文章就介绍到这了,更多相关Java模拟售票功能内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java多线程之简单模拟售票功能

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java多线程之简单模拟售票功能
    一、创建 二、完整代码 package com.ql; import lombok.SneakyThrows; import okhttp3.Call; import okh...
    99+
    2022-11-12
  • java多线程模拟实现售票功能
    铁道部发布了一个售票任务,要求销售1000张票,要求有3个窗口来进行销售,请编写多线程程序来模拟这个效果。 1 线程类 测试方法: public static void main...
    99+
    2022-11-12
  • Java实战之多线程模拟站点售票
    目录一、实验题目二、分析三、完整代码:一、实验题目 二、分析 哦吼,这次的实验题目是一道非常经典的多线程买票问题。题目要求我们创建5个线程来模拟卖票,当然这其中就包含多线程存在也就...
    99+
    2022-11-12
  • java多线程之火车售票系统模拟实例
    1.前言为了学习多线程共享与通信,我们模拟一个火车售票系统,假设有10张火车票,三个窗口(也就是三个线程)同时进行售票。2.非同步代码package com.tl.skyLine.thread; public class SellTic...
    99+
    2023-05-31
    java 多线程 模拟售票
  • Python多线程实现模拟火车站售票
    本文实例为大家分享了Python多线程模拟火车站售票的具体代码,供大家参考,具体内容如下 Python的标准库提供了两个模块:thread和threading,thread是低级模块...
    99+
    2022-11-12
  • 怎么在Java中利用多线程模拟站点售票
    怎么在Java中利用多线程模拟站点售票?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、实验题目二、分析哦吼,这次的实验题目是一道非常经典的多线程买票问题。题目要求我们创建...
    99+
    2023-06-15
  • Java多线程实现模拟12306火车站售票系统
    该系统一共涉及到3个类: 车票(Ticket) 12306系统(System12306) 售票窗口(Window) 车票类,涉及三个属性: 起始...
    99+
    2022-11-12
  • Java多线程如何实现模拟12306火车站售票系统
    这篇文章主要介绍Java多线程如何实现模拟12306火车站售票系统,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!该系统一共涉及到3个类:车票(Ticket)12306系统(System12306)售票窗口(Windo...
    99+
    2023-06-15
  • 模拟简单Java线程池的方法详解
    目录一、 前言二、线程池是什么?三、线程池构造方法ThreadPoolExecutor的构造方法的参数都是啥意思?四、模拟实现一个线程池总结一、 前言 为了实现并发编程,于是就引入了...
    99+
    2022-11-13
  • java如何使用多线程模拟抢红包功能
    这篇文章主要为大家展示了“java如何使用多线程模拟抢红包功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java如何使用多线程模拟抢红包功能”这篇文章吧。今天有朋友问我一道面试题,有5个人抢...
    99+
    2023-05-30
    java
  • Shell脚本模拟多线程功能分享
    #!/bin/bash function pinghost { ping $1 -c 1 -w 10 |grep rtt|cut -d “/” -f6 } tmp_fifofile=”/tmp/$...
    99+
    2022-06-04
    多线程 脚本 功能
  • Java网络编程实例——简单模拟在线聊天
    目录1、前提知识 2、实现思路: 1、前提知识 需要知道简单的IO流操作,以及简单的UDP发送数据包的原理。 需要用到的类:DatagramSocket、DatagramPacke...
    99+
    2022-11-12
  • 如何编写Shell脚本模拟多线程功能
    这篇文章主要讲解了“如何编写Shell脚本模拟多线程功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何编写Shell脚本模拟多线程功能”吧!代码如下:#!/bin/bashfunctio...
    99+
    2023-06-09
  • Java编程之多线程死锁与线程间通信简单实现代码
    死锁定义 死锁是指两个或者多个线程被永久阻塞的一种局面,产生的前提是要有两个或两个以上的线程,并且来操作两个或者多个以上的共同资源;我的理解是用两个线程来举例,现有线程A和B同时操作两个共同资源a和b,A操作a的时候上锁LockA,继续执行...
    99+
    2023-05-30
    java 多线程 ava
  • Java多线程案例之单例模式懒汉+饿汉+枚举
    目录前言:1.单例模式概述2.单例模式的简单实现2.1饿汉模式2.2懒汉模式2.3枚举实现单例模式前言: 本篇文章将介绍Java多线程中的几个典型案例之单例模式,所谓单例模式,就是一...
    99+
    2022-11-13
  • python 之简单模拟银行系统功能(卡号申请、还款、支付、取现)
    一、简单说明1、源代码文件见附件 Credit.zip2、关于转账功能,因时间问题,转账功能待续4、逻辑图二、代码1、包encryption中的(password.py文件)#!/usr/bin/env&n...
    99+
    2022-10-18
  • java多线程学习之死锁的模拟和避免(实例讲解)
    1.死锁死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。Java 死锁产生的四个必要条件:互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用不可抢...
    99+
    2023-05-31
    java 多线程 避免
  • 从零开始学习 Java:简单易懂的入门指南之多线程(三十四)
    多线程 1.实现多线程1.1简单了解多线程1.2并发和并行1.3进程和线程1.4实现多线程方式一:继承Thread类【应用】1.5实现多线程方式二:实现Runnable接口【应用】1.6实现多...
    99+
    2023-10-18
    学习 java python spring boot 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作