`
endual
  • 浏览: 3558746 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

线程池的举例使用

    博客分类:
  • java
 
阅读更多

 

Java多线程示例:4个售票员卖1000张火车票

分类: JAVA 235人阅读 评论 (1) 收藏 举报

Java多线程示例:4个售票员卖1000张火车票

分类: JAVA 112人阅读 评论 (0) 收藏 举报
  1. //售票员   
  2. import  java.util.Iterator;  
  3. import  java.util.Map;  
  4.   
  5.   
  6. public   class  TicketSaler  implements  Runnable {  
  7.     private  Map<String, Boolean> ticketMap; //票池   
  8.     private  String salerName; //售票员姓名   
  9.       
  10.     public  TicketSaler(Map<String, Boolean> ticketMap, String salerName){  
  11.         this .ticketMap = ticketMap;  
  12.         this .salerName = salerName;  
  13.     }  
  14.   
  15.       
  16. //售票   
  17.     private   void  saleTicket(){  
  18.            
  19.         for (Iterator<String> it = ticketMap.keySet().iterator(); ;){  
  20.             synchronized  (ticketMap)  
  21.             {  
  22.                 if (it.hasNext()){  
  23.                     String ticketNo = it.next();  
  24.                     if (!ticketMap.get(ticketNo)){  
  25.                         System.out.println(salerName +":"  + ticketNo +  "已被售出。" );  
  26.                         ticketMap.put(ticketNo, true );  
  27.                     }  
  28.                 }else {  
  29.                     break ;  
  30.                 }  
  31.             }  
  32.         }  
  33.     }  
  34.       
  35.     public   void  run() {  
  36.         saleTicket();  
  37.     }  
  38.   
  39. }  

 

  1. //售票员控制台   
  2.   
  3. import  java.util.HashMap;  
  4. import  java.util.Map;  
  5. import  java.util.concurrent.ExecutorService;  
  6. import  java.util.concurrent.Executors;  
  7.   
  8.   
  9. public   class  TicketSalerConsole {  
  10.   
  11.     /** 功能说明:  
  12.      * @param args  
  13.      * @author 胡海  
  14.      * @since 2011-11-16 下午11:45:55  
  15.      */   
  16.   
  17.     public   static   void  main(String[] args) {  
  18.         Map ticketMap = new  HashMap<String, Boolean>(); //票池:<票编号,是否已出售>   
  19.         for ( int  i =  1 ; i <=  1000 ; i++){ //生成1000张火车票到票池   
  20.             ticketMap.put("T"  + i,  false );  
  21.         }  
  22.           
  23. //生成4名售票员   
  24.         TicketSaler s1 = new  TicketSaler(ticketMap,  "S1" );  
  25.         TicketSaler s2 = new  TicketSaler(ticketMap,  "S2" );  
  26.         TicketSaler s3 = new  TicketSaler(ticketMap,  "S3" );  
  27.         TicketSaler s4 = new  TicketSaler(ticketMap,  "S4" );  
  28.           
  29.         Thread t1 =new  Thread(s1);  
  30.         Thread t2 =new  Thread(s2);  
  31.         Thread t3 =new  Thread(s3);  
  32.         Thread t4 =new  Thread(s4);        
  33.           
  34.         t1.setName("T1" );  
  35.         t2.setName("T2" );  
  36.         t3.setName("T3" );  
  37.         t4.setName("T4" );  
  38.           
  39.         ExecutorService service = Executors.newCachedThreadPool();  
  40.           
  41.         service.execute(t1);  
  42.         service.execute(t2);  
  43.         service.execute(t3);  
  44.         service.execute(t4);  
  45.           
  46.         service.shutdown();//执行完线程池中的线程后尽快退出   
  47.     }  
  48.   

分享到:
评论

相关推荐

    VC写的一个简单的线程池

    虽然VC标准库并不直接提供线程池的实现,但Windows API提供了`CreateThreadPool()`和`SubmitWorkItem()`等功能,可以用于构建线程池,但使用起来较为复杂,通常需要自己实现线程池的管理逻辑。 通过上述知识点,...

    Java 线程池详解及创建简单实例

    使用线程池时,我们需要根据实际需求选择合适的配置,比如,对于CPU密集型任务,应选择较小的线程池,避免线程切换开销;对于I/O密集型任务,可以适当增加线程数,利用多线程并行处理。 创建线程池的简单实例如下:...

    Java面试 spring知识点 线程池 面试题

    面试中可能会问到如何使用反射创建和调用对象,以及反射在Spring中的应用。 BeanFactory和ApplicationContext的区别是面试常考问题。BeanFactory主要关注于对象的创建和管理,而ApplicationContext则提供了更全面的...

    自测试卷4.doc1.为什么在C#中我们不用担心内存漏洞? 2.写出数据类型转换(至少4种)的方法,代码举例。

    * 可以使用ThreadPool类来创建线程池。 七、SQL语言 * 视图是数据库的外模式,用于简化complex查询。 八、重写 * 重写(Overriding)是指在派生类中重新定义基类的方法。 九、线程.sleep()方法 * Thread.Sleep...

    概括设计模式,举例详解抽象工厂模式

    这种模式在资源管理、配置管理和线程池等场景下非常有用,因为它可以确保系统中只存在一份资源或配置的唯一实例,避免了资源冲突和浪费。 #### 结构型模式 结构型模式关注如何将类或对象结合在一起形成更大的结构...

    MySQL优化介绍和举例

    3. 线程池优化:启用线程池(如thread_handling=pool_of_threads),减少线程创建和销毁的开销。 4. 参数调优:根据实际负载调整如query_cache_size、innodb_flush_log_at_trx_commit等参数。 四、存储引擎优化 1...

    Android之线程池ThreadPoolExecutor的简介

    举例说明: 假如:corePoolSize=2,maximumPoolSize=3,workQueue容量为8; 最开始,执行的任务A,B,此时corePoolSize已用完,再次执行任务C,则C将被放入缓冲队列workQueue中等待着,如果后来又添加了7个任务,...

    常见多线程与并发服务器设计方案举例.docx

    - 线程共享进程的文件描述符,因此在一个进程中创建的FD可以在所有线程中使用。 3. **并发服务器方案**: - **循环式/迭代式服务器**:适用于短连接,因为它们在单一线程中循环处理读写,无法充分利用多核。 - *...

    C#SNMP_TRAP举例

    - 使用`MultiThreadedMessageDispatcher`和`ThreadPool`来处理并发的TRAP消息。 - 根据监听地址类型选择UDP或TCP作为传输方式。 - 添加对不同SNMP版本的支持。 - 配置安全模型以支持安全的SNMP通信。 #### 处理TRAP...

    多线程创建举例问题下载

    在Java中,多线程的创建通常使用上述两种方式。以下是一个简单的例子: ```java // 方式1:继承Thread类 class MyThread extends Thread { @Override public void run() { // 线程执行的代码 } } public class ...

    互联网高频Java后端面试题20道(适合1~3年)V1.0.79.docx

    1. **资源复用**:线程池中的线程可以被重复使用,减少了线程创建和销毁的开销。 2. **任务调度**:线程池可以设置线程数量上限,避免过多线程导致系统资源耗尽。 3. **任务控制**:线程池提供了控制并发级别、限制...

    Job 基于spring简单实例

    而`TaskScheduler`接口则允许我们自定义任务调度逻辑,如使用线程池或其他调度策略。 在“Job基于Spring简单实例”中,我们可能会遇到以下关键概念和组件: 1. **配置Spring任务调度**: 配置Spring的任务调度...

    java编程面试题包含答案

    - 线程池的使用及优点。 7. **IO流** - 流的分类:字节流和字符流。 - 文件读写操作,如FileReader、FileWriter。 - 转换流的角色和用途。 8. **反射** - 什么是反射,如何在运行时获取类的信息? - 动态...

    tplink一面 后端.pdf

    同时,面试官可能还会要求面试者举例说明他们曾经编写过的代码和使用过的编程语言。 5. 对Java语言的看法 Java是一种广泛使用的面向对象的高级编程语言,尤其在企业级应用中非常流行。面试官询问对Java的看法可能是...

    多线程实现客户-服务器结构的一个例子(37KB)

    3. **线程池**:在实际应用中,通常会使用线程池来管理线程,避免频繁地创建和销毁线程带来的开销。线程池预先创建一定数量的线程,当有请求时,从池中取出空闲线程进行服务,完成后再放回池中。 4. **并发与同步**...

    c++多线程编程的十个例子

    为了防止这种问题,我们可以使用同步机制,如互斥量(`std::mutex`)、条件变量(`std::condition_variable`)和信号量(`std::semaphore`)。一个例子可能是两个线程共享一个资源,一个线程读取,另一个线程写入,互斥量...

    中兴华为面试试题(经典)

    - 如何在Java中实现线程池,分析线程池的工作原理。 5. **JVM相关**: - JVM内存模型,包括堆内存、栈内存、方法区等区域的作用。 - 类加载过程,解释双亲委派模型。 - 谈谈JVM性能调优,包括垃圾回收优化、类...

    iocp简单例子,对初学者非常有利

    这是因为每个线程都可以处理多个已完成的I/O操作,而不是像传统的线程池模型那样,每个线程对应一个客户端连接。这种设计减少了线程上下文切换的开销,提升了系统资源利用率,从而达到更高的通信效率。 在实际应用...

    java基础面试考察点.pdf

    1. Java 的类加载器体系结构和双亲委托机制,应用场景举例。 2. JVM 内存结构,GC 算法,参数调优;JVM 的内存结构,String 常量池的考核。 3. 内存分配策略;垃圾回收器种类,垃圾回收扫描算法(root 扫描),回收...

Global site tag (gtag.js) - Google Analytics