java多线程之铁路售票系统

 更新时间:2019年07月13日 15:57:46   作者:beyond谚语  
这篇文章主要为大家详细介绍了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;
  }

}

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

相关文章

  • Java日期工具类的封装详解

    Java日期工具类的封装详解

    在日常的开发中,我们难免会对日期格式化,对日期进行计算,对日期进行校验,为了避免重复写这些琐碎的逻辑,我这里封装了一个日期工具类,方便以后使用,直接复制代码到项目中即可使用,需要的可以参考一下
    2022-10-10
  • Java对象转json JsonFormat注解

    Java对象转json JsonFormat注解

    这篇文章主要介绍了Java对象转json JsonFormat注解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java统计一个字符串在另外一个字符串出现次数的方法

    Java统计一个字符串在另外一个字符串出现次数的方法

    这篇文章主要介绍了Java统计一个字符串在另外一个字符串出现次数的方法,涉及java字符串遍历、正则匹配等相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • 浅析java中next与nextLine用法对比

    浅析java中next与nextLine用法对比

    这篇文章主要介绍了java中next与nextLine用法区别以及实例分析了他们的区别,需要的朋友可以参考下
    2017-04-04
  • java ArrayBlockingQueue阻塞队列的实现示例

    java ArrayBlockingQueue阻塞队列的实现示例

    ArrayBlockingQueue是一个基于数组实现的阻塞队列,本文就来介绍一下java ArrayBlockingQueue阻塞队列的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • 在Java中实现二叉搜索树的全过程记录

    在Java中实现二叉搜索树的全过程记录

    二叉树包含了根节点,孩子节点,叶节点,每一个二叉树只有一个根节点,每一个结点最多只有两个节点,左子树的键值小于根的键值,右子树的键值大于根的键值,下面这篇文章主要给大家介绍了关于如何在Java中实现二叉搜索树的相关资料,需要的朋友可以参考下
    2022-03-03
  • 详谈java中int和Integer的区别及自动装箱和自动拆箱

    详谈java中int和Integer的区别及自动装箱和自动拆箱

    这篇文章主要介绍了详谈java中int和Integer的区别及自动装箱和自动拆箱,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • IDEA新建bootstrap.yml文件不显示叶子图标的问题

    IDEA新建bootstrap.yml文件不显示叶子图标的问题

    这篇文章主要介绍了IDEA新建bootstrap.yml文件不显示叶子图标的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • java9版本特性资源自动关闭的语法增强

    java9版本特性资源自动关闭的语法增强

    这篇文章主要为大家介绍了java9版本特性资源自动关闭的语法增强的详细使用说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • 利用maven命令指定配置文件打包springboot项目

    利用maven命令指定配置文件打包springboot项目

    这篇文章主要介绍了利用maven命令指定配置文件打包springboot项目,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11

最新评论