java多线程模拟实现12306售票
业务描述:
假设有200张票,用4个线程去订票,不能有两个或者以上的线程订到了同一个票(原因就不说了),当最后一张票卖掉的时候结束,再订就抛异常提示出票卖完了。
业务分析,要实现以上功能,
1、需要创建一个车票类,初始化票,卖票的接口saleTicket()
2、自定义异常的一个类。
3、创建卖票线程类,在run方法中卖车票。
4、初始化车票的线程,负责初始化车票,也就是初始化Ticket类中的数组。
5、创建主方法进行测试。欢迎使用Markdown编辑器
## 初学Java这个题目在网上找了一个答案,奈何看不懂,自己写了一个,但是写的很简单,但是它竟然实现了,还请各位大佬多多指教
public class Test01 {
public static void main(String[] args) {
SaleTicket s=new SaleTicket(200);
Thread t1=new Thread(s,"t1" );
Thread t2=new Thread(s,"t2" );
Thread t3=new Thread(s,"t3" );
Thread t4=new Thread(s,"t4" );
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class SaleTicket implements Runnable {
int j;
int i = 0;
public SaleTicket(int j) {
this.j = j;
}
@Override
public void run() {
while (true) {
synchronized (this) {
if (i < j) {
System.out.println("线程"+Thread.currentThread().getName() + "卖了第" + (i + 1) + "张票");
i++;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
try {
throw new MyException("票卖完了");
} catch (MyException e) {
e.printStackTrace();
break;
}
}
}
}
}
}
class MyException extends Exception{
public MyException(String message) {
super(message);
}
}