线程池的举例使用

 

Java多线程示例:4个售票员卖1000张火车票

分类: JAVA 235人阅读 评论 (1) 收藏 举报

Java多线程示例:4个售票员卖1000张火车票

分类: JAVA 112人阅读 评论 (0) 收藏 举报
  1. //售票员   
  2. import  java.util.Iterator;  
  3. import  java.util.Map;  
  4.   
  5.   
  6. public   class  TicketSaler  implements  Runnable {  
  7.     private  Map<String, Boolean> ticketMap; //票池   
  8.     private  String salerName; //售票员姓名   
  9.       
  10.     public  TicketSaler(Map<String, Boolean> ticketMap, String salerName){  
  11.         this .ticketMap = ticketMap;  
  12.         this .salerName = salerName;  
  13.     }  
  14.   
  15.       
  16. //售票   
  17.     private   void  saleTicket(){  
  18.            
  19.         for (Iterator<String> it = ticketMap.keySet().iterator(); ;){  
  20.             synchronized  (ticketMap)  
  21.             {  
  22.                 if (it.hasNext()){  
  23.                     String ticketNo = it.next();  
  24.                     if (!ticketMap.get(ticketNo)){  
  25.                         System.out.println(salerName +":"  + ticketNo +  "已被售出。" );  
  26.                         ticketMap.put(ticketNo, true );  
  27.                     }  
  28.                 }else {  
  29.                     break ;  
  30.                 }  
  31.             }  
  32.         }  
  33.     }  
  34.       
  35.     public   void  run() {  
  36.         saleTicket();  
  37.     }  
  38.   
  39. }  

 

  1. //售票员控制台   
  2.   
  3. import  java.util.HashMap;  
  4. import  java.util.Map;  
  5. import  java.util.concurrent.ExecutorService;  
  6. import  java.util.concurrent.Executors;  
  7.   
  8.   
  9. public   class  TicketSalerConsole {  
  10.   
  11.     /** 功能说明:  
  12.      * @param args  
  13.      * @author 胡海  
  14.      * @since 2011-11-16 下午11:45:55  
  15.      */   
  16.   
  17.     public   static   void  main(String[] args) {  
  18.         Map ticketMap = new  HashMap<String, Boolean>(); //票池:<票编号,是否已出售>   
  19.         for ( int  i =  1 ; i <=  1000 ; i++){ //生成1000张火车票到票池   
  20.             ticketMap.put("T"  + i,  false );  
  21.         }  
  22.           
  23. //生成4名售票员   
  24.         TicketSaler s1 = new  TicketSaler(ticketMap,  "S1" );  
  25.         TicketSaler s2 = new  TicketSaler(ticketMap,  "S2" );  
  26.         TicketSaler s3 = new  TicketSaler(ticketMap,  "S3" );  
  27.         TicketSaler s4 = new  TicketSaler(ticketMap,  "S4" );  
  28.           
  29.         Thread t1 =new  Thread(s1);  
  30.         Thread t2 =new  Thread(s2);  
  31.         Thread t3 =new  Thread(s3);  
  32.         Thread t4 =new  Thread(s4);        
  33.           
  34.         t1.setName("T1" );  
  35.         t2.setName("T2" );  
  36.         t3.setName("T3" );  
  37.         t4.setName("T4" );  
  38.           
  39.         ExecutorService service = Executors.newCachedThreadPool();  
  40.           
  41.         service.execute(t1);  
  42.         service.execute(t2);  
  43.         service.execute(t3);  
  44.         service.execute(t4);  
  45.           
  46.         service.shutdown();//执行完线程池中的线程后尽快退出   
  47.     }  
  48.   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值