售票任务
2.铁道部发布了一个售票任务,要求销售1000张票,要求有3个窗口来进行销售,请编写多线程程序来模拟这个效果
i. 窗口001正在销售第1000张票
ii. 窗口001正在销售第999张票
iii. 窗口002正在销售第998张票
iv. 。。。
v. 窗口002正在销售第1张票
public class Test01 {
public static void main(String[] args) {
TaskDemo task = new TaskDemo();
Thread t1 = new Thread(task,"窗口001");
Thread t2 = new Thread(task,"窗口002");
Thread t3 = new Thread(task,"窗口003");
t1.start();
t2.start();
t3.start();
}
}
public class TaskDemo implements Runnable{
private int ticket=1000;
private Lock lock = new ReentrantLock();
@Override
public void run() {
while(ticket>0){
//这个也可以
// synchronized (this){
// if (ticket>0){
// System.out.println(Thread.currentThread().getName()+"正在销售第"+ticket+"张票");
// ticket--;
// }
// if (ticket<=0){
// System.out.println(Thread.currentThread().getName()+"票已售完");
// }
// }
lock.lock();
if (ticket>0){
System.out.println(Thread.currentThread().getName()+"正在销售第"+ticket+"张票");
ticket--;
}
if (ticket<=0){
System.out.println(Thread.currentThread().getName()+"票已售完");
}
lock.unlock();
}
}
}