打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
多线程(模拟售票)

问题1:

假设有火车票100张,创建10个线程模拟10个售票点,每个售票点100毫秒卖一张票。 打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。输出格式如下:

 第4售票点卖出第100张票
 第2售票点卖出第101张票 ……
【代码】
 

 

  1. class T4E02   
  2. {  
  3.     public static void main(String[] args)   
  4.     {  
  5.         Resource rs = new Resource(100);  
  6.  
  7.         for (int i=0;i<10 ;i++ )  
  8.         {  
  9.             new Thread(new Seller(i,rs)).start();  
  10.         }  
  11.     }  
  12. }  
  13. /**  
  14.  *  资源类  
  15.  *  定义了票的总数,和同步了的售票方法  
  16.  */ 
  17. class Resource  
  18. {  
  19.     int ticketNum = 50;  
  20.     boolean flag = false ; // 定义票是否卖完  
  21.  
  22.     public Resource(){}  
  23.     public Resource(int num)  
  24.     {  
  25.         this.ticketNum = num;  
  26.     }  
  27.  
  28.     public synchronized void sellTicket(Seller s)  
  29.     {  
  30.         if (ticketNum > 0)  
  31.         {  
  32.             System.out.println("第" + s.num + "售票点卖出了第" + ticketNum + "张票……");  
  33.             ticketNum--;  
  34.         }  
  35.         else   
  36.         {  
  37.             flag = true;  
  38.         }  
  39.     }  
  40. }  
  41. /**  
  42.  *  售票点类  
  43.  *    
  44.  */ 
  45. class Seller implements Runnable  
  46. {  
  47.     int num;  
  48.     Resource rs;  
  49.  
  50.     public Seller(int num,Resource rs)  
  51.     {  
  52.         this.num = num;  
  53.         this.rs = rs;  
  54.     }  
  55.  
  56.     public final void run()  
  57.     {  
  58.         while (!rs.flag)  
  59.         {  
  60.             /**  
  61.              *  调用资源类的同步方法  
  62.              */   
  63.             rs.sellTicket(this);   
  64.  
  65.             try 
  66.             {  
  67.                 Thread.sleep(100);  
  68.             }  
  69.             catch (InterruptedException e)  
  70.             {  
  71.                 e.printStackTrace();  
  72.             }  
  73.         }  
  74.     }  

【运行结果】

 

转贴:http://www.oschina.net/code/snippet_85011_6481

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
PHP操作数据库详解_记录一段现在
阻塞队列
使用 JAX-RS 简化 REST 应用开发
【安卓应用】猜火车V6.2
mysql、sqlserver、oracle分页,java分页统一接口实现
Java实现Excel导入数据库,数据库中的数据导入到Excel
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服