程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 代碼分享:模擬售票 學習多線程

代碼分享:模擬售票 學習多線程

編輯:關於JAVA

【代碼說明】

假設有火車票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. for (int i=0;i<10 ;i++ )
  7. {
  8. new Thread(new Seller(i,rs)).start();
  9. }
  10. }
  11. }
  12. /**
  13. * 資源類
  14. * 定義了票的總數,和同步了的售票方法
  15. */
  16. class Resource
  17. {
  18. int ticketNum = 50;
  19. boolean flag = false ; // 定義票是否賣完
  20. public Resource(){}
  21. public Resource(int num)
  22. {
  23. this.ticketNum = num;
  24. }
  25. public synchronized void sellTicket(Seller s)
  26. {
  27. if (ticketNum > 0)
  28. {
  29. System.out.println("第" + s.num + "售票點賣出了第" + ticketNum + "張票……");
  30. ticketNum--;
  31. }
  32. else
  33. {
  34. flag = true;
  35. }
  36. }
  37. }
  38. /**
  39. * 售票點類
  40. *
  41. */
  42. class Seller implements Runnable
  43. {
  44. int num;
  45. Resource rs;
  46. public Seller(int num,Resource rs)
  47. {
  48. this.num = num;
  49. this.rs = rs;
  50. }
  51. public final void run()
  52. {
  53. while (!rs.flag)
  54. {
  55. /**
  56. * 調用資源類的同步方法
  57. */
  58. rs.sellTicket(this);
  59. try
  60. {
  61. Thread.sleep(100);
  62. }
  63. catch (InterruptedException e)
  64. {
  65. e.printStackTrace();
  66. }
  67. }
  68. }
  69. }


【圖片效果】

原文鏈接:http://www.oschina.Net/code/snippet_85011_6481

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved