-
学习多线程比较经典的案例就是实现售票系统了。
-
我们先来看看需求:铁道部发布了一个售票任务,要求销售100张票,要求有5个窗口来进行销售,效果如下:
窗口001正在销售第100张票 窗口001正在销售第99张票 窗口002正在销售第98张票 . . . 窗口05正在销售第1张票 票已经销售完毕
-
对需求进行分析:
一共有1000张票,5个窗口同步执行;所以需要用到多线程技术,其中车票数应该被5个窗口共享,不然容易出现出售同一张票的问题。
-
下面用两种实现线程的方式来完成需求:
一、通过继承Thread类
package com.hym.Threaded;
public class SaleSysTest {
public static void main(String[] args) {
//创建5个线程,传入 线程名: [001]、[002]...并开启
for(int i=1;i<6;i++){
new SaleThread("[00"+i+"]").start();
}
}
}
class SaleThread extends Thread {
//车票数被共享,所以定义为static,数量为100.
private static int ticket = 100;
//通过锁来保证线程不会重复访问.
private static Object obj = new Object();
//有