歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java 多線程賣票演示

Java 多線程賣票演示

日期:2017/3/1 11:09:30   编辑:Linux編程

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. public class Sale {
  32. public static void main(String[] args) {
  33. Ticket ticket=new Ticket();
  34. Thread t1=new Thread(ticket);
  35. Thread t2=new Thread (ticket);
  36. Thread t3=new Thread(ticket);
  37. Thread t4=new Thread(ticket);
  38. t1.start();
  39. t2.start();
  40. t3.start();
  41. t4.start();
  42. }
  43. }
  44. /*
  45. * 多線程出現的安全性問題:
  46. * 在操作共享數據時,一條語句在沒有執行完的情況下,另外一語句參與進行,就會再現錯誤
  47. *   解決辦法 :
  48. * 在多條語句操作共享數據時, 在一個操作共享數據的語句沒有執行時,不能讓其他的線程進來
  49. *
  50. * Java中提供了同步代碼塊:
  51. * synchronized(對象)
  52. * {
  53. * }
  54. * 注意:
  55. * 不要同步代碼塊裡面睡覺,這樣會造成自己不執行,也不讓其他線程執行的後果
  56. *
  57. * 多線程 賣票: 創建多個線程,共同賣票
  58. *
  59. *
  60. * */ 2011/10/24 11:4:49
Copyright © Linux教程網 All Rights Reserved