代码分享:模拟售票 学习多线程

开发 后端
一段简单的火车票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.  
  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

【编辑推荐】

  1. 用Java GUI编写的画板程序
  2. Java中带复选框的树的实现和应用
  3. 制作完整的Java可执行文件
  4. 10个强大的JavaScript表单验证插件
  5. Java网络编程菜鸟进阶:TCP和套接字入门
责任编辑:林师授 来源: 开源中国社区
相关推荐

2010-07-26 13:27:19

Perl多线程

2009-10-23 09:26:09

VB.NET多线程

2009-06-11 10:22:18

Java多线程

2009-06-11 10:48:53

Java多线程

2010-02-04 10:19:39

C++多线程

2011-08-18 17:07:23

IOS开发多线程NSInvocatio

2009-08-03 11:07:18

Scala Actor

2009-08-28 16:43:57

C#多线程学习

2010-03-17 15:45:06

Java多线程求和

2010-03-17 19:24:38

Java多线程循环

2009-07-17 17:29:13

多任务多线程

2009-08-26 18:13:55

C#多线程lock

2021-04-28 08:00:16

多线程高并发操作

2019-07-15 16:10:00

技术研发指标

2009-03-12 10:52:43

Java线程多线程

2020-03-12 10:16:45

代码Java多线程

2010-03-17 09:33:30

Java多线程方案

2020-04-07 11:10:30

Python数据线程

2010-01-08 10:48:05

VB.NET多线程

2024-01-15 10:55:40

Python多线程开发
点赞
收藏

51CTO技术栈公众号