Java多线程Runable售票系统实现过程解析

一、无等待,直接出票【虽然解决了不会冲票问题,但显然不符合实际生活】:

package com.thread.sale;

public class Sale {
  public static void main(String[] args) {//悟,那么设计爬虫的时候,下载的资源唯一,使用多线程下载
    SaleTickets t = new SaleTickets();//关键在这里,只创建一个对象,而后交给线程去执行这个任务,达到目的
    Thread thread1 = new Thread(t);
    Thread thread2 = new Thread(t);
    Thread thread3 = new Thread(t);
    Thread thread4 = new Thread(t);
    thread1.start();
    thread2.start();thread3.start();thread4.start();
  }
}

class SaleTickets implements Runnable{
  private int tickets = 1;
  public void run() {
    // TODO Auto-generated method stub
    while (true) {
      if (tickets<=100) {
        System.out.println(Thread.currentThread().getName()+"销售第"+tickets+++"票");
      }else {
        break;
      }
    }
  }

}

二、等待客户买票的实现:

很显然,这就牵涉了前面的生产者和消费者的问题;那么就要这样设计:

模拟后台发售票的部门【生产者producer】----->票务系统【资源池common】---->购票者【消费者consumer】

系统设计上:

在实际生产生活中,应该是消费者购买票的客户端购票,占用了这张票,同时通知系统,我在购买这张票,此时系统锁定这张票一定时间。

当消费者购买之后,就返回一个消息告诉系统,该票已经被买,如果时间超过无需客户端返回,系统自动回收该票。

所以系统应该存在对票这个对象具有存储、销售【对未销售票的回收、发放功能】、向后台反馈票是否被销售以及销售完成的功能。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java多线程文件分片下载实现的示例代码

    多线程下载介绍 多线程下载技术是很常见的一种下载方案,这种方式充分利用了多线程的优势,在同一时间段内通过多个线程发起下载请求,将需要下载的数据分割成多个部分,每一个线程只负责下载其中一个部分,然后将下载后的数据组装成完整的数据文件,这样便大大加快了下载效率.常见的下载器,迅雷,QQ旋风等都采用了这种技术. 分片下载 所谓分片下载就是要利用多线程的优势,将要下载的文件一块一块的分配到各个线程中去下载,这样就极大的提高了下载速度. 技术难点 并不能说是什么难点,只能说没接触过不知道罢了. 1.如何请

  • Java模拟多线程实现抢票代码实例

    这篇文章主要介绍了Java模拟多线程实现抢票,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 实现100张票抢购的demo 这里需要一个变量,来保存100张 局部变量: 定义在方法内,方法运行存在,方法运行结束销毁,无法保存一个持久化数据!!! 成员变量: 保存在类对象内,创建对象之后存在,对象不销毁成员变量也不会被内存收回.因为 在每一个类对象中,都存在一个对应的成员变量,这些成员变量不是同一个数据.不是 共享资源,不合适!!! 静态成员变量:

  • Java多线程实现四种方式原理详解

    1.继承Thread类,重写run方法 2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target 3.通过Callable和FutureTask创建线程 4.通过线程池创建线程 前面两种可以归结为一类:无返回值,原因很简单,通过重写run方法,run方式的返回值是void,所以没有办法返回结果 后面两种可以归结成一类:有返回值,通过Callable接口,就要实现call方法,这个方法的返回值是Object,所以返回的结果可以放

  • java实现多线程卖票功能

    java多线程卖票直接先看个例子: public class SelTicketsMainTest { public static void main(String[] args) { SaleTickets1 saleTickets = new SaleTickets1(); for(int t=1;t<=3;t++) { new Thread(saleTickets).start(); } } } class SaleTickets1 implements Runnable{ private

  • java多线程实现文件下载

    本文实例为大家分享了java多线程实现文件下载的具体代码,供大家参考,具体内容如下 1.DownloadManager类 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Ht

  • Java编程实现多线程TCP服务器完整实例

    相关Java类 Socket public class Socket extends Object ·功能:TCP客户端套接字 ·构造方法: Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号 ·常用方法: 1.getInetAddress 获得InetAddress的相关信息 2.getInputStream 获得此TCP连接的输入流 3.getOutPutStream 获得此TCP连接的输出流 ServerSo

  • 基于Java实现多线程下载并允许断点续传

    完整代码:https://github.com/iyuanyb/Downloader 多线程下载及断点续传的实现是使用 HTTP/1.1 引入的 Range 请求参数,可以访问Web资源的指定区间的内容.虽然实现了多线程及断点续传,但还有很多不完善的地方. 包含四个类: Downloader: 主类,负责分配任务给各个子线程,及检测进度DownloadFile: 表示要下载的哪个文件,为了能写输入到文件的指定位置,使用 RandomAccessFile 类操作文件,多个线程写同一个文件需要保证线

  • java多线程实现下载图片并压缩

    最近在做一个需求:从其他系统的ftp目录下载存储图片url的文件,然后读取文件中的url地址,根据地址下载图片后按天压缩成一个包,平均一个地址文件中包含4000个地址左右,也就是说一个文件扫描后需要下载4000个左右的图片,然后压缩,下面把我的实现方式和优化过程记录下来,如果大家有什么更好的方式可以分享. 使用框架:SpringMVC 定时任务实现:继承org.springframework.scheduling.quartz.QuartzJobBean; ftp环境搭建就不说了,在其他博客记录

  • Java多线程Runable售票系统实现过程解析

    一.无等待,直接出票[虽然解决了不会冲票问题,但显然不符合实际生活]: package com.thread.sale; public class Sale { public static void main(String[] args) {//悟,那么设计爬虫的时候,下载的资源唯一,使用多线程下载 SaleTickets t = new SaleTickets();//关键在这里,只创建一个对象,而后交给线程去执行这个任务,达到目的 Thread thread1 = new Thread(t)

  • Java多线程生产者消费者模式实现过程解析

    单生产者与单消费者 示例: public class ProduceConsume { public static void main(String[] args) { String lock = new String(""); Produce produce = new Produce(lock); Consume consume = new Consume(lock); new Thread(() -> { while (true) { produce.setValue();

  • java多线程编程同步器Future和FutureTask解析及代码示例

    publicinterfaceFuture<V>Future表示异步计算的结果.它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果.计算完成后只能使用get方法来获取结果,如有必要,计算完成前可以阻塞此方法.取消则由cancel方法来执行.还提供了其他方法,以确定任务是正常完成还是被取消了.一旦计算完成,就不能再取消计算.如果为了可取消性而使用Future但又不提供可用的结果,则可以声明Future<?>形式类型.并返回null作为底层任务的结果. Future主要

  • Java多线程并发编程和锁原理解析

    这篇文章主要介绍了Java多线程并发编程和锁原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等方案后,问题得到解决. 加锁方案见下文. 二.乐观锁 & 悲观锁 1.乐观锁 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁

  • python多线程同步售票系统

    目录 1.分析过程 2.准备过程 3.实现过程 解决问题场景:假如剩余1000张电影票需要售卖,同时有10家电影App来售卖这1000张电影票.主要的逻辑实现过程是什么,要求使用python技术栈进行解题? 1.分析过程 分析:主要信息点是10家App平台同时售卖1000张电影票.此时,可以使用10个python线程来作为10家App平台,同时售卖必须保证电影票数量的同步,比如A平台卖出了一张票那总共剩余的票数是999,B平台若要再卖出一张票则应该是999-1=998张票. 技术栈分析:pyth

  • Java多线程窗口售票问题实例

    本文介绍了多线程实现多个窗口售票问题的两种枷锁方式, 分别是synchronized 和lock()和unlock() 具体代码如下: 第一种: package Runnable; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /* * 同步 * 这里有两种方式加锁 * 分别是 * 1.synchronized * 2.lock()和unlock() */ publ

  • Java对象转json的方法过程解析

    这篇文章主要介绍了Java对象转json的方法过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1. jsonlib:个人感觉最麻烦的一个需要导入的包也多,代码也相对多一些. 2.Gson:google的 3.FastJson:阿里巴巴的,个人觉得这个比较好,而且据说这个也是性能最好一个. 下面就贴出三种写法的代码,读者可以任选其一去使用.关于demo里面所使用的jar包,可以自行去下载. Jsonlib: package json; i

  • Java简单数据加密方法DES实现过程解析

    这篇文章主要介绍了Java简单数据加密方法DES实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.数据在网络中传输时,需要进行加密处理 双方约定一个相同的key(key不在网络中进行传输,只传输加密数据),然后根据将key根据一定的DES规则转换,得到真正的key,在进行加密和解密,为了增加安全性,加密过程中再加上编码base64转换,解密时先解码base64 加密和解密的完整的代码: package com.cmit.hall.

  • Java获取客户端真实IP地址过程解析

    这篇文章主要介绍了Java获取客户端真实IP地址过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 业务背景 服务器端接收客户端请求的时候,一般需要进行签名验证,客户端IP限定等拦截,在进行IP限定的时候就需要获取客户端真实的IP. 基础知识 访问服务端的方式一般分为两种: 未经过代理,直接访问服务器端: 通过多级代理,最终到达服务器端(nginx,squid,haproxy). 客户端请求信息都包含在HttpServletRequest中

  • Java lambda表达式实现Flink WordCount过程解析

    这篇文章主要介绍了Java lambda表达式实现Flink WordCount过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 本篇我们将使用Java语言来实现Flink的单词统计. 代码开发 环境准备 导入Flink 1.9 pom依赖 <dependencies> <dependency> <groupId>org.apache.flink</groupId> <artifactId>

随机推荐