创建测试类
package com.qf.demo1;
import sun.security.krb5.internal.Ticket;
/**
*铁道部发布了一个售票任务,要求销售1000张票,要求有5个窗口来进行销售,请编写多线程程序来模拟这个效果
* i.窗口001正在销售第1000张票
* ii.窗口001正在销售第999张票
* iii.窗口002正在销售第998张票
* iv.。。。
* v.窗口05正在销售第1张票
* vi.票已经销售完毕
* @Author XZG
* @Date: 2020/11/5 19:10
* @Version 1.0
*/
public class TicketTest {
public static void main(String[] args) {
SellTickets t1 = new SellTickets();
for (int i = 1; i < 6; i++) {
Thread t2 = new Thread(t1, "窗口" + i);
//执行任务
t2.start();
}
}
}
创建票类
package com.qf.demo1;
/**
*
* @Author XZG
* @Date: 2020/11/5 19:10
* @Version 1.0
*/
public class SellTickets implements Runnable{
//声明票数
public Integer tickets = 1000;
//创建新的对象,给方法上锁
Object ob = new Object();
@Override
public void run() {
synchronized (ob){
//创建一个死循环,执行sell方法
while (true){
if (sell()){
break;
}
}
}
}
public synchronized boolean sell(){
//当票数大于1时,持续买卖票
if (tickets >= 1){
System.out.println(Thread.currentThread().getName() + "在卖第" + tickets + "张票");
//卖出一张票,tickts--
tickets--;
return false;
}
else {
//卖完,结束循环
System.out.println("票已经卖完");
return true;
}
}
}
运行结果