Java中使用多线程模拟多站点售票过程2011-03-23zhangjunhd这是一个在并发状态下对共享资源的多线程访问。这些访问必须是互斥的进行,因为涉及到对资源的修改。假设现在销售火车票。目的地有3个,分别是北京,天津和上海。使用一个枚举类型表示。Destation.javapackage com.zj.tickets; public enum Destation { BEIJING, SHANGHAI, TIANJING }下面设计车票类,final int original表示车票基数;int current表示当前还有多少张票;Destation destation表示目的地,它必须从上面的枚举型中取出其一。Ticket.javapackage com.zj.tickets; public class Ticket { private final int original; private int current; private final Destation destation; public Ticket(int nums, Destation where) { current = original = nums; destation = where; } public int degress() { return --current; } public int original() { return original; } public boolean soldout() { return current <= 0; } public Destation getDestation() { return destation; } public int getCurrent() { return current; } }下面设计售票厅类,Map<Destation, Ticket> tickets表示目前可销售的车票种类,它通过一个static块初始化。Map<Destation, Integer> records是当前售票厅的火车票销售情况。List<BookingOffice> offices表示当前可工作的所有售票厅,每个售票厅是一个线程。int ticketsSold表示当前售票厅售出的火车票总数。int id表示当前售票厅编号。每个线程都会模拟客户买票、工作人员查询数据库和售票交易过程。模拟的数据为,当前发往北京、上海和天津的火车票各5张;每个售票厅交易5次(无论交易成功或失败)后关闭。