美文网首页
Java多线程-简单例子(门票售卖)

Java多线程-简单例子(门票售卖)

作者: Liuzz25 | 来源:发表于2018-12-05 11:00 被阅读0次

前言:多个售票点同时售卖门票,通过多线程同步锁实现同步售票。

1.创建JavaProject。

项目结构图

2.编写Ticket类。

/**
 * <p>Title: Ticket</p>
 * <p>Description:门票类 </p>
 * @author Org
 * @version 1.0
 */
public class Ticket {
    
    // 票数余量
    private int restNum;

    public int getRestNum() {
        return restNum;
    }

    public void setRestNum(int restNum) {
        this.restNum = restNum;
    }

    // 门票类构造函数
    public Ticket(int restNum) {
        super();
        this.restNum = restNum;
    }
    
}

3.编写TicketThread类。

/**
 * <p>Title: TicketThread</p>
 * <p>Description:门票线程类</p>
 * @author Org
 * @version 1.0
 */
public class TicketThread extends Thread {
    
    // 售票点名称
    private String wicketName;
    // 门票类
    private Ticket ticket;
    // 票数余量
    private int count;

    // 线程构造函数
    public TicketThread(String wicketName, Ticket ticket) {
        this.wicketName = wicketName;
        this.ticket = ticket;
        count = ticket.getRestNum();
    }

    @Override
    public void run() {
        for(int i = 1; i <= count; i++){
            try{
                //同步锁
                synchronized (ticket) {
                    if(ticket.getRestNum() > 0){
                        ticket.setRestNum(ticket.getRestNum() - 1);
                        Thread.sleep(100);
                        System.out.println(wicketName + " 合计卖出 :" + i + " 张门票" + ", 剩余:" + ticket.getRestNum() + " 张门票");
                    }else{
                        System.out.println(wicketName + " 门票抢光啦 ~");
                        break;
                    }
                }
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

4.编写测试Test类

/**
 * 
 * <p>Title: Test</p>
 * <p>Description: 测试类</p>
 * @author Org
 * @version 1.0
 */
public class Test {
    
    public static void main(String[] args) {
        
        // 设置票数总量为25
        Ticket ticket = new Ticket(25);

        // 创建3个线程
        TicketThread wicket1 = new TicketThread("1号售票口", ticket);
        TicketThread wicket2 = new TicketThread("2号售票口", ticket);
        TicketThread wicket3 = new TicketThread("3号售票口", ticket);
        TicketThread wicket4 = new TicketThread("4号售票口", ticket);

        // 启动线程
        wicket1.start();
        wicket2.start();
        wicket3.start();
        wicket4.start();
        
    }
}

5.运行结果

运行结果图

相关文章

  • Java多线程-简单例子(门票售卖)

    前言:多个售票点同时售卖门票,通过多线程同步锁实现同步售票。 1.创建JavaProject。 2.编写Ticke...

  • go http服务器/客户端

    服务器端简单例子: 客户端简单例子 贴吧单线程爬取例子 贴吧多线程爬虫简单例子 多线程爬取多个页面例子

  • java关键字synchronized

    synchronized:java锁,在多线程中,执行某个对象时,必须给他上锁,要不会造成混乱。举个简单的例子:幼...

  • java多线程学习笔记

    前言:对于java多线程的资料数不胜数,我们这里只是在学习后简单地总结一下并给出一些小例子,本文适合java初学者...

  • 多线程模拟银行出纳和管理过程

    这个例子来自java编程思想,模拟了银行出纳的多线程场景

  • 生产者-消费者模式 系列 之一 Sychronized,Not

    生产者,消费者模式可谓是Java多线程中比较经典的例子.该系列文章希望以该模式的实现为起点,将Java中对于多线程...

  • 带你搞懂Java多线程(五)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四) ...

  • 带你搞懂Java多线程(六)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四)带...

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

  • Java并发编程

    海滩拾贝,隽永文章遗满地 以生活例子说明单线程与多线程简介:通俗易懂说明了单线程,多线程,IO,进程 Java并发...

网友评论

      本文标题:Java多线程-简单例子(门票售卖)

      本文链接:https://www.haomeiwen.com/subject/mmilpttx.html