thread31
来源:互联网 发布:淘宝莆田高仿鞋店铺 编辑:程序博客网 时间:2024/05/22 12:36
package com.neutron.t21;import java.util.ArrayList;import java.util.List;import java.util.Vector;import java.util.concurrent.TimeUnit;/** * 有N张火车票,每张票都有1个编号,同时有10个窗口对外售票 * * 分析下面程序可能存在哪些问题:重复售票,还是超量售票? */public class Ticket3 { static List<String> tickets = new ArrayList<>(); static { for (int i = 0; i < 10000; i++) { tickets.add("No:" + i); } } /** * 使用synchronized来解决问题,为什么呢?相当于判断和操作属于原子性操作,不会被打断 * 上述重复出售以及超量出售问题得到解决 */ public static void main(String[] args) { for (int i = 0; i < 10; i++) { new Thread(() -> { while (true) { synchronized (tickets) { if (tickets.size() <= 0) { break; } try { TimeUnit.MICROSECONDS.sleep(6); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("sell ticket:" + tickets.remove(0)); } } }).start(); } }}