多线程卖票案例
火车站有多个售票窗口,这些售票窗口一块卖100张票,即100张票被多个窗口共享。
用线程模拟售票窗口;用输出语句模拟卖出的票。
package com.igeek_03;
/**
* @ClassName: TicketDemo
* @Description: 多线程模拟火车站卖票
* @date 2018年2月4日 下午1:59:57
* Company www.igeekhome.com
*
* 使用第二种创建并开启线程的方式,方便数据共享
*
* 1、定义卖票的线程执行目标
* 在成员变量位置将票定义为数字100,卖一张票,该数字减1,一直到小于0为止。
* 重写run方法,完成卖票逻辑
* while(true){
* if(有票){
* //卖票
* 打印,xxx线程正在卖第几张票
* 每卖完一张票,要将票数-1
* }else{
* //没有票,跳出循环,结束程序
* }
* }
* 2、创建卖票的线程执行目标对象
* 3、使用该卖票线程执行目标对象创建多个线程
* 4、开启多个线程
*/
public class TicketDemo {
public static void main(String[] args) {
//创建卖票的线程执行目标对象
Ticket ticket = new Ticket();
//使用该卖票线程执行目标对象创建多个线程
Thread thread = new Thread(ticket,"Jack");
Thread thread2 = new Thread(ticket,"Rose");
Thread thread3 = new Thread(ticket,"Trump");
//开启多个线程
thread.start();
thread2.start();
thread3.start();
}
}
package com.igeek_03;
/**
* @ClassName: Ticket
* @Description: 卖票类
* @date 2018年2月4日 下午2:14:50
* Company www.igeekhome.com
*
* 定义卖票的线程执行目标类
*/
public class Ticket implements Runnable{
//在成员变量位置将票定义为数字100
/**
* @Fields number :票数
*/
private int number = 100;
/**
* @Title: run
* @Description: 完成卖票的线程逻辑
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
//车站不停地在卖票
while(true){
//有票就买票
if(number>0){
System.out.println(Thread.currentThread().getName()+"正在销售第"+(number--)+"张票");
}else{
//没有票,就跳出循环,不再卖票
break;
}
}
}
}