java多线程之铁路售票系统
作者:beyond谚语 发布时间:2022-01-31 12:25:14
标签:java,售票系统
本文实例为大家分享了java多线程之铁路售票系统的具体代码,供大家参考,具体内容如下
问题:铁路售票,一共100张,通过四个窗口卖完。
要求:分别用
继承Thread类 和 实现Runnable接口 去实现
①用继承Thread类去实现
package com.yy.syn;
public class Demo3_Ticket {
/**
* 铁路售票,一共100张,通过四个窗口卖完
* 用继承Thread类去实现
* 分析:
* 四个窗口就相当于四条线程,100张火车票就相当于成员变量
*
* */
public static void main(String[] args) {
new Ticket().start(); //创建对象,第一条线程
new Ticket().start(); //创建对象,第二条线程
new Ticket().start(); //创建对象,第三条线程
new Ticket().start(); //创建对象,第四条线程
}
}
class Ticket extends Thread{ //继承Thread类
private static int ticket = 100; //四条线程公用这100个成员变量
// private static Object obj = new Object(); //如果用引用数据类型的成员变量当作锁对象,必须是静态的,这里的obj对象应该设置为static静态类型
public void run(){ //重写run()方法
while(true){
synchronized (Ticket.class) { //这里应该变为synchronized(obj){}
if(ticket <= 0){
break;
}
System.out.println(getName() + "...这是第" + ticket-- + "号票");
}
}
}
}
②用实现Runnable接口去实现
package com.yy.syn;
import java.security.GeneralSecurityException;
public class Demo4_Ticket {
/**
* 铁路售票,一共100张,通过四个窗口卖完
* 用实现Runnable接口去实现
* 分析:
* 四个窗口就相当于四条线程,100张火车票就相当于成员变量
*
* */
public static void main(String[] args) {
MyTicket mt = new MyTicket(); //这里只是创建了一次对象
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
/*Thread t1 = new Thread(mt);
//public void start() 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。
t1.start();
t1.start();
t1.start();
t1.start();*/
}
}
class MyTicket implements Runnable{ //让MyTicket这个类去实现Runnable这个接口
private int tickets = 100; //然后,Myticket类里面定义成员变量,这里的票只有100张
@Override
public void run() {
while(true){
synchronized (Ticket.class) { //这里的锁对象也可以是this,即 synchronized (this),因为在主函数里面只创建了一次对象,这里的this就相当于主函数里面的mt
if(tickets <= 0){
break;
}
try{
Thread.sleep(10);
} catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "...这是第" + tickets-- + "号票" );
} //不是Thread的子类,不能直接调用getName,需要Thread.currentThread().getName()
}
}
private String getName() {
return null;
}
}
来源:https://blog.csdn.net/qq_41264055/article/details/81259315
0
投稿
猜你喜欢
- 本博文参考自https://www.jb51.net/article/100269.htmwww.jb51.net/article/1002
- 前言ps命令的作用是显示进程信息的。|符号,是个管道符号,表示左右两边两个命令同时执行。grep命令是查找(Global Regular E
- iText介绍和说明因为项目需要生成PDF文件,所以去找了一下能够生成PDF的Java工具,看到了iText可以说好评如潮。如果你想通过ja
- 一、背景Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE
- 本文实例为大家分享了Unity实现场景漫游相机的具体代码,供大家参考,具体内容如下前言拿到场景后总喜欢在场景里面玩一段时间,那这个脚本就是你
- 1.Java进程的创建 Java提供了两种方法用来启动进程或其它程序: (1)使用Runtime的exec()方法 (2)使用Process
- 本文实例讲述了java实现新浪微博Oauth接口发送图片和文字的方法。分享给大家供大家参考。具体如下:基于网上很多人利用新浪api开发新浪微
- 使用foreach循环的坑我们首先看一段MyBatis中使用foreach循环的sql:SELECT * FROM table where
- public void add(intindex, Eelement)从index索引的位置添加element元素,后面的元素都往
- 一、继承1、继承的概念继承机制:是面向对象程序设计是代码可以复用的最重要手段,允许程序员在保持原有类特性的基础上进行扩展,增加新的功能,产生
- 方法重载概述方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法互相构成重载* 多个方法在同一个类中* 多个放方法具有相同方
- 这几天自己研究了关于地手机上面开发安卓地图的问题,发现百度官方示例demo讲解百度持续定位方面还是讲解的有些不清楚,本人研究了几次之后将其弄
- 一. spring配置文件:application.xml<?xml version="1.0" encoding
- 一、定界符成帧Framer接口package framer;import java.io.IOException;import java.i
- 背景Swagger 可以提供 API 操作的测试文档,本文记录 Swagger 使用过程中遇到的两个小问题:全局响应结果进行包装后导致 Sw
- 如下所示:public class 字符串常用操作 { public static void main(String[] arg
- 前2天有读者问到是否有带分页功能的表格控件,今天分页功能的表格控件详细解析。PaginatedDataTablePaginatedDataT
- Java在控制台打印本月日历在学习《Java核心技术卷I·基础知识》第10版 的时候里面有一个小例子,就是在控制台上打印日历的一个例子,就想
- 摘要:想必大家做开发的时候都会用到下拉刷新的控件,现在各种第三方的下拉刷新控件不胜枚举。当然最NB的还是XListView。其他也有针对Gr
- 本文实例讲述了Android编程之手机壁纸WallPaper设置方法。分享给大家供大家参考,具体如下:/** * Andorid设置手机屏幕