Java學習之:多線程(模擬售票)

問題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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章