模拟售火车票 多线程


100张票,10个窗口(10个线程模拟),实现线程卖票计数



import java.util.Iterator; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class SellTicket implements Runnable { private int count = 100; static Map<String,Integer> map = new ConcurrentHashMap<String,Integer>(); public static void main(String[] args) { SellTicket st = new SellTicket(); for (int i = 0; i < 10; i++) { Thread thread = new Thread(st); map.put(thread.getName(), 0); thread.start(); } } @Override public void run() { while (true) { synchronized(this){ if(count > 0){ count--; System.out.println("线程=" + Thread.currentThread().getName() + ";剩余票数=" + count); Iterator<Map.Entry<String,Integer>> i = map.entrySet().iterator(); while(i.hasNext()){ Map.Entry<String,Integer> entry=(Map.Entry<String,Integer>)i.next(); if(entry.getKey().equals(Thread.currentThread().getName())) map.put(entry.getKey(), entry.getValue().intValue() + 1); } }else if(count==0){ Iterator<Map.Entry<String,Integer>> i = map.entrySet().iterator(); while(i.hasNext()){ Map.Entry<String,Integer> entry=(Map.Entry<String,Integer>)i.next(); System.out.println("线程=" + entry.getKey() + ";卖票数=" + entry.getValue()); } } } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }

  

原文地址:https://www.cnblogs.com/evilrogue/p/2856531.html