多线程模拟卖票程序,并统计各窗口售出数量

来源:互联网 发布:csol网络加速器 编辑:程序博客网 时间:2024/06/05 18:37
import java.io.IOException;import java.util.HashMap;import java.util.Map;class Ticket implements Runnable{private  int tick = 1000;//用于统计各窗口售出数量Map<String,Integer> map = new HashMap<String, Integer>();Object obj = new Object();public void run(){boolean flag = true;while(flag){synchronized(obj){if(tick>0){String name = Thread.currentThread().getName();//null表示之前没售出过,现在的值为1,不为空的话在上一次基础上票数加1int currentCount = map.get(name)==null?1:map.get(name)+1;//将修改后的售票张数放回去map.put(name, currentCount);//System.out.println(name+"....sale : "+ tick);tick--;}else{flag = false;}}}}}public class  ThreadTest{public static void main(String[] args) throws IOException, InterruptedException {Ticket t = new Ticket();Thread t1 = new Thread(t);Thread t2 = new Thread(t);Thread t3 = new Thread(t);Thread t4 = new Thread(t);t1.start();t2.start();t3.start();t4.start();//等待卖票线程执行完毕t1.join();t2.join();t3.join();t4.join();//统计各个窗口出售信息for(String name:t.map.keySet()){System.out.println(name+"--"+t.map.get(name));}}}
结果示例:
Thread-3--339Thread-1--340Thread-2--242Thread-0--79


0 0