歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java 多線程賣票演示

Java 多線程賣票演示

  1. class Ticket implements Runnable  
  2. {  
  3.     private int tick=100;  
  4.     //   
  5.     /*public void run() 
  6.     { 
  7.         while(tick>0) 
  8.         { 
  9.             try{Thread.sleep(10);}catch(Exception ex) {} 
  10.              //當現在tick=1時,而所有線程都在這個地方停止了,那麼這時就會出現 tick < 0 的情況 ,這就是多線程情況 的安全性問題 
  11.             System.out.println(Thread.currentThread().getName()+"..."+tick--); 
  12.         } 
  13.     }*/  
  14.     public  void run()  
  15.     {  
  16.         while(true)   //循環是指線程不停的去賣票   
  17.         {  
  18.             synchronized(this)//當操作的是共享數據時, 用同步代碼塊進行包圍起來,這樣在執行時,只能有一個線程執行同步代碼塊裡面的內容   
  19.             {  
  20.                 if(tick>0)  
  21.                 {  
  22.                     //try{Thread.sleep(10);}catch(Exception ex) {}在同步代碼塊裡面睡覺,給不睡效果是一樣 的,作用只是自已不執行,也不讓線程執行   
  23.                     System.out.println(Thread.currentThread().getName()+"..."+tick--);  
  24.                 }else  
  25.                     break;  
  26.                 }  
  27.             try{Thread.sleep(100);}catch(Exception ex) {}//所以把睡覺放到同步代碼塊的外面,這樣賣完一張票就睡一會,讓其他線程再賣,這樣所有的線程都可以賣票   
  28.         }  
  29.     }  
  30. }  
  31.   
  32. public class Sale {  
  33.   
  34.   
  35.     public static void main(String[] args) {  
  36.         Ticket ticket=new Ticket();  
  37.         Thread t1=new Thread(ticket);  
  38.         Thread t2=new Thread (ticket);  
  39.         Thread t3=new Thread(ticket);  
  40.         Thread t4=new Thread(ticket);  
  41.         t1.start();  
  42.         t2.start();  
  43.         t3.start();  
  44.         t4.start();  
  45.     }  
  46.   
  47. }  
  48. /* 
  49.  *  多線程出現的安全性問題: 
  50.  *          在操作共享數據時,一條語句在沒有執行完的情況下,另外一語句參與進行,就會再現錯誤 
  51.  *   解決辦法 : 
  52.  *      在多條語句操作共享數據時, 在一個操作共享數據的語句沒有執行時,不能讓其他的線程進來 
  53.  *  
  54.  *      Java中提供了同步代碼塊: 
  55.  *              synchronized(對象) 
  56.  *                  { 
  57.  *                  } 
  58.  *     注意: 
  59.  *          不要同步代碼塊裡面睡覺,這樣會造成自己不執行,也不讓其他線程執行的後果  
  60.  *      
  61.  *     多線程 賣票: 創建多個線程,共同賣票 
  62.  *  
  63.  *  
  64.  * */                                                   2011/10/24  11:4:49  
Copyright © Linux教程網 All Rights Reserved