java多线程同步问题,小弟百撕不得其解,特来求助!

多线程共享同一资源,同一张票卖出了多张!同步方法,同步代码块都没用。
问题:编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程。
public class ThreadDemo {
public static void main(String[] args) {
Thread t1 = new Thread(new SealWindow(),"1号售票窗口");
Thread t2 = new Thread(new SealWindow(),"2号售票窗口");
Thread t3 = new Thread(new SealWindow(),"3号售票窗口");
Thread t4 = new Thread(new SealWindow(),"4号售票窗口");
Thread t5 = new Thread(new SealWindow(),"5号售票窗口");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}

}

class Ticket {
private int id;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

}

class SealWindow implements Runnable {
private ReentrantLock lock = new ReentrantLock();
@Override
public void run() {
sellTicket();
}

public synchronized void sellTicket() {
    TicketSealCenter tsc = TicketSealCenter.getInstance();
    List<Ticket> tickets = tsc.getTickets();
    while (!tickets.isEmpty()) {
        Iterator<Ticket> it = tickets.iterator();
        Ticket ticket = it.next();
        System.out.println(Thread.currentThread().getName() + "...."
                + "卖了一张票,id为" + "..." + ticket.getId());
        tickets.remove(ticket);
    }
}

}

// 只有一个售票中心,所以把它设置成单例
class TicketSealCenter {
private static List tickets = new ArrayList();
private int ticketNum = 100;

private TicketSealCenter() {
    // 给每张票设置一个唯一的ID号
    setIdToTicket(tickets);
}

private static TicketSealCenter tsc = new TicketSealCenter();

// 提供一个公有方法,获取售票中心对象
public static TicketSealCenter getInstance() {
    return tsc;
}

private void setIdToTicket(List<Ticket> tickets2) {
    for (int i = 1; i <= ticketNum; i++) {
        Ticket ticket = new Ticket();
        ticket.setId(i);
        tickets.add(ticket);
    }
}

public List<Ticket> getTickets() {
    return tickets;
}

}

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥30 这是哪个作者做的宝宝起名网站
    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!