packagejavasimple;public classSaleTicket {public static voidmain(String[] args) {//创建一个初始化线程,若干个买票线程//要等初始化线程初始化好了之后,才能买票//创建一个Ticket类的对象,分别传给不同的线程

Ticket ticket = newTicket();

Thread t1= new InitTicketThread("初始化线程", ticket);//等初始化线程初始化好车票之后,才能开始卖票

try{

t1.join();

}catch(InterruptedException e) {

e.printStackTrace();

}//创建四个买票线程,开始卖票

Thread t2 = new SaleTicketThread("卖票线程1", ticket);

Thread t3= new SaleTicketThread("卖票线程2", ticket);

Thread t4= new SaleTicketThread("卖票线程3", ticket);

Thread t5= new SaleTicketThread("卖票线程4", ticket);

}

}/*** 创建车票类、初始化车票

*@authorhaokui

**/

classTicket {//初始化200张票的空间

private String[] tickets = new String[200];private int index = tickets.length - 1; //指向数组的索引(第一张票)

publicTicket() {

}public voidinitTicket() {//初始化车票,给数组的元素赋值,考虑是否要同步

for (int i = 0; i < tickets.length; i++) {

tickets[i]= "第" + (i + 1) + "号车票";

}

}public synchronized String saleTicket() throwsNoTicketException {//判断是否有票,有票的情况下再卖票,没有票呢,抛出异常,//考虑是否需要同步

if (index >= 0) {

String s=tickets[index];//故意制造了一个问题,出现多个线程共卖一张车票

try{

Thread.sleep(10);

}catch(InterruptedException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

tickets[index]= null;

index--;returns;

}else{throw new NoTicketException("没有车票了");

}

}

}/*** 创建卖票线程类

*@authorhaokui

**/

class SaleTicketThread extendsThread {privateTicket ticket;publicSaleTicketThread(String name, Ticket ticket) {super(name);this.ticket =ticket;this.start();

}//在run方法中卖车票

public voidrun() {for (int i = 0; i < 60; i++) {try{

String s=ticket.saleTicket();

System.out.println(this.getName() + "卖票成功========>" +s);

}catch(NoTicketException e) {

System.out.println(this.getName() + " 卖票时发生异常!");

e.printStackTrace();//如果发生异常,说明没有车票了,就中断循环,不要在卖票了

break;

}

}

}

}/*** 初始化车票的线程,负责初始化车票,也就是初始化Ticket类中的数组

*@authorhaokui

**/

class InitTicketThread extendsThread {privateTicket ticket;publicInitTicketThread(String name, Ticket ticket) {super(name);this.ticket =ticket;this.start();

}//在run方法中初始化车票

public voidrun() {

ticket.initTicket();

}

}/*** 自定义异常

*@authorhaokui

**/

class NoTicketException extendsException {publicNoTicketException() {

}publicNoTicketException(String msg) {super(msg);

}

}

java 12306 模拟登陆_java多线程模拟实现12306售票相关推荐

  1. java 模拟停车_Java多线程编程小实例模拟停车场系统

    下面分享的是一个Java多线程模拟停车场系统的小实例(Java的应用还是很广泛的,哈哈),具体代码如下: Park类 public class Park { boolean []park=new bo ...

  2. Java模拟售票窗口代码_java多线程模拟售票,多个窗口售票

    package com.ma.thread001; /** * 多线程模拟售票,多个窗口售票 * @author ma * */ public class SellTicktDemo implemen ...

  3. java 模拟登陆exe_Java简单模拟登陆和爬虫实例---博客园老牛大讲堂

    鉴于有人说讲的不清楚,我这里再详细补充一下:更新日期:2017-11-23 本片文章适合初学者,只简单说了一下爬虫怎么用,和一个简单的小实例.不适合你的就可以不看了.----博客园老牛大讲堂 1.什么 ...

  4. java点名代码滚动_JAVA多线程实现简单的点名系统

    效果图如下: CMain函数: package com.shubing.main; public class CMain { public static void main(String[] args ...

  5. python模拟登陆 验证码el_python 模拟登陆github的示例

    # -*- coding: utf-8 -*- # @Author: CriseLYJ # @Date: 2020-08-14 12:13:11 import re import requests c ...

  6. Scrapy框架的学习(10.Scrapy中的模拟登陆(使用cookie模拟登陆))

    1. 为什么需要模拟登陆? 获取cookie,能够爬取登陆后的页面的数据 2.使用cookie模拟登陆的场景 (1) cookie过期时间很长,常见于一些不规范的网站 (2) 能在cookie过期之前 ...

  7. php模拟登陆,php实现模拟登陆正方教务系统

    本文主要介绍通过php的curl库实现正方教务系统的登陆,由于正方教务系统每年可能会有一些更新,因此本文是针对2018年而言,所介绍一些模拟登陆正方的方法,希望能帮助到大家. 1.保存登陆界面的验证码 ...

  8. python模拟登陆 验证码el_python 模拟登陆163邮箱

    import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium ...

  9. java线程代码实现_Java 多线程代码实现讲解

    作为一个完全面向对象的语言,Java提供了类 java.lang.Thread 来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程.那么如何提供给 Java 我们要线程执行的代码呢? ...

最新文章

  1. python数据结构与算法:单向循环列表
  2. spark编程基础--6.DataFrame
  3. Spring Boot的Tomcat 启动详解
  4. SQL Server timeout分析和总结
  5. html页面加载完成后会触发的事件_前端隐秘角落 - 页面渲染
  6. 前端学习(1981)vue之电商管理系统电商系统之完成可选项的添加操作
  7. C++实现:自定义数组类型实现相关运算符重载
  8. 通过transmittable-thread-local源码理解线程池线程本地变量传递的原理
  9. 搭建svn,创建svn项目
  10. 4.测试用例模板(p2p)
  11. cai_VBA植物大战僵尸2Total Control自动刷金币
  12. C++-Nuget包一键打包-上传工具开发分享
  13. Android Apk签名修改V1,V2,V3,V4
  14. 【粒子动画tsParticles】
  15. 关于软件界面设计、控件颜色搭配、一些实用建议(偷懒技巧)总结——针对C# WinForm/WPF技术
  16. ubuntu下查看硬件信息等指令整理,安装并简单运行HotSpot
  17. Matlab 从怀俄明大学上爬取探空数据
  18. 【Vue】- created()方法
  19. QT官网最新的往期版本下载链接
  20. C#NetFrame3.5 JsonHelper

热门文章

  1. “远程开机棒”设置教程
  2. 联想K41安装Debian Gnu/Linux笔记
  3. 【论文笔记】A Neural Representation of Sketch Drawings
  4. android qq 仿 退出,Android自定義Dialog(仿QQ同步助手退出對話框)
  5. C语言中关于数组在函数调用中的应用
  6. 简单图片下载器 - 豆瓣小说图书封面下载 连续多页
  7. 自己怎么DIY头像?告诉你个DIY头像方法
  8. C#中Console.WriteLine()与Console.Write的区别
  9. 【SQL常用语句或函数】
  10. 腾讯蓝鲸智云平台搭建