精华内容
下载资源
问答
  • 一、模拟火车票售卖场景,三个窗口售卖A-B地的火车票,火车票共100张。 要求: 编号1-100 打印示例:窗口1售卖火车票66 窗口:写3个线程, import java.util.Random; /** * @auther: 巨未 * @DATE: 2019/4/12 ...

    一、模拟火车票售卖场景,三个窗口售卖A-B地的火车票,火车票共100张。

    要求:
    编号1-100 打印示例:窗口1售卖火车票66
    窗口:写3个线程,

    
    import java.util.Random;
    
    /**
     * @auther: 巨未
     * @DATE: 2019/4/12 0012 23:18
     * @Description:
     */
    class Tickets {
    
        private static int num = 0;
    
        public static synchronized int sale() {
            int i = ++num;
            return i> 100?-1:i;  //如果i>100返回-1.小于100返回i
        }
    }
    public class SaleTickets {
        public static void main(String[] args) {
    
            Thread thread1 = new Thread(new Runnable() {
                @Override
                public void run() {
                    Random random = new Random();
                    int i = 0;
                    while ((i = Tickets.sale()) != -1) {
                        System.out.println(Thread.currentThread().getName() + "售卖票:" + i);
                        try {
                            Thread.sleep(random.nextInt(1000));
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
    
                    }
                }
            }, "窗口1");
            Thread thread2 = new Thread(new Runnable() {
                @Override
                public void run() {
                    Random random = new Random();
                    int i = 0;
                    while ((i = Tickets.sale()) != -1) {
                        System.out.println(Thread.currentThread().getName() + "售卖票:" + i);
                        try {
                            Thread.sleep(random.nextInt(2000));
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
    
                    }
                }
            }, "窗口2");
            Thread thread3 = new Thread(new Runnable() {
                @Override
                public void run() {
                    Random random = new Random();
                    int i = 0;
                    while ((i = Tickets.sale()) != -1) {
                        System.out.println(Thread.currentThread().getName() + "售卖票:" + i);
                        try {
                            Thread.sleep(random.nextInt(2000));
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
    
                    }
                }
            }, "窗口3");
    
            thread1.start();
            thread2.start();
            thread3.start();
            }
    }
    
    

    运行示例:
    在这里插入图片描述

    展开全文
  • public class Demo3_Synchronized { public static void main(String[] ... System.out.println((ticket2--)+"号已售出!");  }  }  } } 转载于:https://www.cnblogs.com/zyybb/p/10517801.html

    public class Demo3_Synchronized {

      public static void main(String[] args) {
      // TODO Auto-generated method stub

        Ticket2 ticket2 = new Ticket2();
        new Thread(ticket2) {}.start();
        new Thread(ticket2) {}.start();
        new Thread(ticket2) {}.start();
        new Thread(ticket2) {}.start();
      }

    }

    class Ticket2 implements Runnable{

      private int ticket2 = 100;
      @Override
      public void run() {
        // TODO Auto-generated method stub
        synchronized (this) {
          while(ticket2>0) {
            System.out.println((ticket2--)+"号票已售出!");
          }
        }

      }

    }

    转载于:https://www.cnblogs.com/zyybb/p/10517801.html

    展开全文
  • 多线程模拟销售火车票

    千次阅读 2014-12-23 14:21:13
    多线程模拟销售火车票


    1.模拟销售类:

    class ThreadTest implements Runnable
    {
    private int tickets=100;
    public void run()
    {
    while(true)
    {
    if(tickets>0)
    System.out.println(Thread.currentThread().getName()
    + " is saling ticket " + tickets--);
    }
    }
    <p>}</p>
    
    2.执行类:

    public static void main(String [] args)
    {
    ThreadTest t=new ThreadTest();
    new Thread(t).start();
    new Thread(t).start();
    new Thread(t).start();
    new Thread(t).start();
    
    }


    展开全文
  • java多线程模拟购买火车票 本次做的是一个火车票的售卖模拟,不管用户是在窗口还是APP上购买,必然不可能买到同一张票这也就是说一张票的售卖必然是一个单线程在操作的,所以,我们在写代码是也要注意这一点 ...

    java多线程模拟购买火车票

    1. 本次做的是一个火车票的售卖模拟,不管用户是在窗口还是APP上购买,必然不可能买到同一张票这也就是说一张票的售卖必然是一个线程在操作的,所以,我们在写代码是也要注意这一点

    2. 首先我们要进行分析 我们需要几个类来完成我们的代码 根据java面向对象编程的思想,我们可以代入现实生活中的场景
      买票–>车站–>窗口–>购票
      通过上述的流程我们可以大概的先分为三个类 车票类 车站类(或者系统类,统一储存票的地方)
      而其中,我们知道火车站或者APP上,每个用户在任何时间都能够购票,所以买票是可以很多人一起进行的,而窗口也是如此,同样的时间,有可能5个窗口都在售票,但是窗口出票是单线程的,而售票功能则是多线程在进行的,所以我们将窗口类设置为多线程的实现类

    3. 类的分析完毕,开始编写代码

    • 车票类-->起始站-->终点站-->价格  这是车票固有的属性
      
    • 系统类-->统一储存的车票(可以用集合来储存)-->出票方法(从集合中减少一张票,售出)
      
    • 窗口类-->继承Thread并重写run()方法-->售票方法(调用系统中的出票方法)
      

    车票类

    package Thread.train_tickets;
    
    public class Ticket {
        private String start;
        private String end;
        private Float price;
    
        public Ticket(){}
        public Ticket(String start, String end, Float price){
            this.start = start;
            this.end = end;
            this.price = price;
        }
    
        public String getStart() {
            return start;
        }
    
        public void setStart(String start) {
            this.start = start;
        }
    
        public String getEnd() {
            return end;
        }
    
        public void setEnd(String end) {
            this.end = end;
        }
    
        public Float getPrice() {
            return price;
        }
    
        public void setPrice(Float price) {
            this.price = price;
        }
    
        @Override
        public String toString() {
            return "Ticket{" +
                    "start='" + start + '\'' +
                    ", end='" + end + '\'' +
                    ", price=" + price +
                    '}';
        }
    }
    
    

    系统类

    package Thread.train_tickets;
    
    import java.util.List;
    import java.util.Vector;
    
    public class System12306 {
    	//单例模式  事先创建对象
        private static System12306 sys = new System12306();
        private List<Ticket> vector = new Vector<Ticket>();
    	//在类加载的时候向集合中添加元素
        {
            for(int i=0;i<50;i++){
                vector.add(new Ticket("北京"+i,"深圳"+i,i*25/10F));
            }
        }
    
        private System12306(){}
    
        public static System12306 getSystem12306(){
            return sys;
        }
    	//出票方法
        public Ticket sellTicket(){
            try{
                return vector.remove(0);//直接从集合中删除第一个元素
            }catch(IndexOutOfBoundsException e){
                return null;//如果出现了异常,证明集合已经没有元素,直接返回null即可
            }
        }
    }
    
    

    窗口类

    package Thread.train_tickets;
    
    public class Window extends Thread{
        private String windowName;
    
        public Window(String windowName) {
            this.windowName = windowName;
        }
    
        public String getWindowName() {
            return windowName;
        }
    
        public void setWindowName(String windowName) {
            this.windowName = windowName;
        }
    
        public void run(){
            this.sellTicket();
        }
    	//系统售票方法
        public void sellTicket(){
            System12306 sys = System12306.getSystem12306();
            while(true){
                Ticket t = sys.sellTicket();//从集合中出一张票
                if(t!=null){//非空则出票成功
                    System.out.println("从"+this.windowName+"售出一张"+t);
                }else{
                    System.out.println("票已售光");
                    break;
                }
            }
        }
    }
    
    

    最后测试执行

    package Thread.train_tickets;
    
    public class Test {
        public static void main(String[] args) {
            Window win1 = new Window("北京东站");
            Window win2 = new Window("北京西站");
            Window win3 = new Window("北京南站");
    		// 注意不要调用run()方法
            win1.start();
            win2.start();
            win3.start();
        }
    }
    
    

    运行结果
    每一次运行的结果都不相同
    因为出票必须是保证线程安全的,同一时间只能有一张票被操作,所以集合上我们选择自带线程安全的Vector集合,同时在系统类加载时我们就需要集合中有数据,所以我们可以用代码块(在类加载的时候就执行)来进行集合中的数据添加,同时我们要保证每个窗口出的票是基于同一个系统对象,所以我们需要用单例模式来进行设计系统类

    由于我是一名学生,所以写的代码难免会有很多不足之处,也希望各位能够多多指出来,非常感谢

    展开全文
  • 多线程模拟火车票

    2019-03-25 22:53:24
    建立售卖线程类: public class TicketRunnable implements Runnable { private int ticketCount = 10;//模拟火车票数量 public void run() { while (true) { synchronized (this) {//线程加锁 ...
  • 模拟火车站卖票: 现在有窗口1, 窗口2, 窗口3同时卖一个车厢的100张火车票, 要求不能卖出重复的票,卖完就结束卖票. package 作业; /** * company: www.abc.com * Author: Administrator * Create Data: 2019/8/13...
  • 多线程练习程序 之 模拟火车票售票系统01版-附件资源
  • 生活中其实有很多多线程的例子,比如火车站...(3)使用多线程模拟各个窗口进行售票 (4)当火车票售完后,火车站也同样欢迎我们 下来,我们代码来实现火车站售票实例 public class MyThread implements Runnabl...
  • public class TicketsThread { public static void main(String[] args) { T tt=new T(); Thread thread=new ... System.out.println(Thread.currentThread().getName()+"卖了一张,还剩下"+count+"张"); } } } }
  • public class Demo2_Snschronized { public static void main(String[] args) {  // TODO Auto-generated method stub ... System.out.println("多线程开始时间(毫秒):"+System.currentTimeMillis());  ...
  • 多线程火车票

    千次阅读 2015-11-20 21:37:06
    多线程火车票 package com.thread; public class TicketThread extends Thread { private static int ticket =100;//模拟100张火车票 @Override public void run() { while(true){ if(ticket>0){ System....
  • 车票购票 每次产生20张(由生产者线程完成),由3台售票机同时循环向外出(售票机就是消费者线程),编写一个卖票模拟小系统 要求: 20张卖完了,售票机就不能卖了,等有才可以; 产生了20张,要等卖了一些...
  • 模拟多线程火车票售卖demo 无锁 无互斥 单纯线程小练习 #include<process.h> #include<windows.h> #include<iostream> using namespace std; void ThreadFun1(void * p); void ThreadFun2...
  • ... public class TicketsThread { ... System.out.println(Thread.currentThread().getName()+"卖了一张,还剩下"+count+"张"); } } } } 转载于:https://www.cnblogs.com/caoal/p/6370690.html
  • 用Java代码模拟卖100张火车票问题:四个售票窗口同时售票且不能卖出同一张火车票。代码如下。package lesson;public class Demo1 {public static void main(String[] args) {// TODO Auto-generated method ...
  • 关于多线程实现火车票售票模拟

    千次阅读 2013-05-11 10:05:40
     System.out.println("当前票数现有" + ticketSum + "张,要售" + sailNum + "张");  ticketSum -= sailNum;  }  else  {  System.out.println("当前票数不足,现有" + ticketSum + "张,要售" +...
  •   需求如下:铁道部发布了一个售票任务,要求销售10张,要求有4个窗口来进行销售,请编写多线程程序来模拟这个效果 第001窗口,正在售票,票号:1 第004窗口,正在售票,票号:2 第002窗口,正在售票,票号...
  • http://pan.baidu.com/s/1pKF5vpL模拟火车票售票系统用来练习多线程再好不过了. 这是第01版,尽量简化难度,我们在之后的版本,一步一步完善. 本节,我们将学习构建一个线程安全且高效的简易版火车票售票系统题目描述...
  • 模拟火车票售票(多线程

    千次阅读 2016-08-05 15:17:19
    思路:每个窗口用一个线程模拟,共享200张 方法一:共享一个对象,则拿到的变量即被共享。public class TicketRunnable implements Runnable { private int sum=200;//sum是基本数据类型,不能用作对象锁,...
  • 关于线程的介绍见上一片博文,iOS单线程:http://blog.csdn.net/yakerwei/article/details/17589709 一、实现结果 在本程序中,用到7个控件,三个说明性label,三个输出口label,一个button。 二、代码的属性...
  • 多线程模拟火车票售卖,保证一张车票不能被不同窗口重复出售
  • 1.前言为了学习多线程共享与通信,我们模拟一个火车售票系统,假设有10张火车票,三个窗口(也就是三个线程)同时进行售票。2.非同步代码package com.tl.skyLine.thread;/*** Created by tl on 17/3/6.*/public class ...
  • 模拟火车票 多线程

    2013-01-11 15:34:00
    100张,10个窗口(10个线程模拟),实现线程卖计数 import java.util.Iterator; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class SellTicket implements Runnable { ...
  • 可以在vs2010中,将项目的字符集,从“使用unicode字符集”改为“使用字节字符集” #include  < windows.h > #include  < iostream.h > DWORD WINAPI Fun1Proc(LPVOID lpParameter); // thread...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 292
精华内容 116
热门标签
关键字:

多线程模拟火车票