一、作业要求:
三个售票窗口同时出售20张票;
程序分析:
1.票数要使用同一个静态值
2.为保证不会出现卖出同一个票数,要java多线程同步锁。
设计思路:
1.创建一个站台类Station,继承Thread,重写run方法,在run方法里面执行售票操作!售票要使用同步锁:即有一个站台卖这张票时,其他站台要等这张票卖完!
2.创建主方法调用类
二、代码实现:
(一)、代码:
package task_07_Exception_Thread;
public class Station extends Thread
{
// 站台可售票数
private static int ticket = 20;
public void run() {
while(true) {
// 同步代码块
synchronized (Station.class)
{
// 如果票数为0,提醒票已卖完,并退出循环
if(ticket == 0) {
System.out.println(Thread.currentThread().getName()+":票已卖完!");
break;
}
// 只要票数不为0,不退出循环,即说明有余票,打印售票一张,并提醒余票。
System.out.println(Thread.currentThread().getName() + ":卖了一张票,余票:" + --ticket);
try
{
// 为模拟售票窗口间的售票动作的时间间隔,设置售票窗口线程在每次卖出票后休眠0.5秒
Thread.sleep(500);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
public static void main(String[] args)
{
// 实例化站台对象
Station s = new Station();
// 创建三个售票窗口线程进行售票
new Thread(s,"售票窗口A").start();
new Thread(s,"售票窗口B").start();
new Thread(s,"售票窗口C").start();
}
}
(二)、运行结果: