`
hardcoder
  • 浏览: 61493 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

《敏捷软件开发》第12章 AcitveObject模式构建多线程

阅读更多
看了我好久才看懂的代码。
 
ActiveObjectEngine.java
  1. package active;   
  2.   
  3. /**  
  4.  *  
  5.  * @author Administrator  
  6.  */  
  7. import java.util.LinkedList;   
  8.   
  9. public class ActiveObjectEngine {   
  10.   
  11.     LinkedList itsCommands = new LinkedList();   
  12.   
  13.     public void addCommand(Command c) {   
  14.         itsCommands.add(c);   
  15.     }   
  16.   
  17.     public void run() {   
  18.         while (!itsCommands.isEmpty()) {   
  19.             Command c = (Command) itsCommands.getFirst();   
  20.             itsCommands.removeFirst();   
  21.             try {   
  22.                 c.execute();   
  23.             } catch (Exception e) {   
  24.             }   
  25.         }   
  26.     }   
  27. }  

 

Command.java
  1. package active;   
  2.   
  3. /**  
  4.  *  
  5.  * @author Administrator  
  6.  */  
  7. public interface Command {   
  8.     public void execute() throws Exception;   
  9. }  

 

DelayedTyper.java
  1. package active;   
  2.   
  3. /**  
  4.  *  
  5.  * @author Administrator  
  6.  */  
  7. public class DelayedTyper implements Command{   
  8.     private long itsDelay;   
  9.     private char itsChar;   
  10.     private static ActiveObjectEngine engine=new ActiveObjectEngine();   
  11.     private static boolean stop=false;   
  12.        
  13.     public static void main(String args[]) throws Exception{   
  14.         engine.addCommand(new DelayedTyper(100,'1'));   
  15.         engine.addCommand(new DelayedTyper(300,'3'));   
  16.         engine.addCommand(new DelayedTyper(500,'5'));   
  17.         engine.addCommand(new DelayedTyper(700,'7'));   
  18.            
  19.         Command stopCommand=new Command(){   
  20.             public void execute(){   
  21.                 stop=true;   
  22.             }   
  23.         };   
  24.            
  25.         engine.addCommand(new SleepCommand(20000,engine,stopCommand));   
  26.         engine.run();   
  27.     }   
  28.        
  29.     public DelayedTyper(long delay,char c){   
  30.         itsDelay=delay;   
  31.         itsChar=c;   
  32.     }   
  33.        
  34.     public void execute() throws Exception{   
  35.         System.out.print(itsChar);   
  36.         if(!stop){   
  37.             delayAndRepeat();   
  38.         }   
  39.     }   
  40.        
  41.     public void delayAndRepeat() throws CloneNotSupportedException{   
  42.         engine.addCommand(new SleepCommand(itsDelay,engine,this));   
  43.     }    
  44. }  

 

SleepCommand.java
  1. package active;   
  2.   
  3. /**  
  4.  *  
  5.  * @author Administrator  
  6.  */  
  7. public class SleepCommand implements Command{   
  8.     private Command wakeupCommand=null;   
  9.     private ActiveObjectEngine engine=null;   
  10.     private long sleepTime=0;   
  11.     private long startTime=0;   
  12.     private boolean started=false;   
  13.        
  14.     public SleepCommand(long milliseconds,ActiveObjectEngine e,Command wakeupCommand){   
  15.         sleepTime=milliseconds;   
  16.         engine=e;   
  17.         this.wakeupCommand=wakeupCommand;   
  18.     }   
  19.        
  20.     public void execute() throws Exception{   
  21.         long currentTime=System.currentTimeMillis();   
  22.         if(!started){   
  23.             started=true;   
  24.             startTime=currentTime;   
  25.             engine.addCommand(this);   
  26.         }else if((currentTime-startTime)
  27.             engine.addCommand(this);   
  28.         }else{   
  29.             engine.addCommand(wakeupCommand);   
  30.         }   
  31.     }   
  32. }  

 

SleepCommandTest.java
  1. package active;   
  2.   
  3. import org.junit.After;   
  4. import org.junit.AfterClass;   
  5. import org.junit.Before;   
  6. import org.junit.BeforeClass;   
  7. import org.junit.Test;   
  8. import static org.junit.Assert.*;   
  9.   
  10. /**  
  11.  *  
  12.  * @author Administrator  
  13.  */  
  14. public class SleepCommandTest {   
  15.        
  16.     public SleepCommandTest() {   
  17.     }   
  18.   
  19.     @BeforeClass  
  20.     public static void setUpClass() throws Exception {   
  21.     }   
  22.   
  23.     @AfterClass  
  24.     public static void tearDownClass() throws Exception {   
  25.     }   
  26.   
  27.     @Before  
  28.     public void setUp() throws Exception {   
  29.     }   
  30.   
  31.     @After  
  32.     public void tearDown() throws Exception {   
  33.     }   
  34.     public boolean commandExecuted=false;   
  35.     @Test  
  36.     public void execute() throws Exception {   
  37.         Command wakeup=new Command(){   
  38.             public void execute(){commandExecuted=true;}   
  39.         };   
  40.            
  41.         ActiveObjectEngine e=new ActiveObjectEngine();   
  42.         SleepCommand c=new SleepCommand(1000,e,wakeup);   
  43.         e.addCommand(c);   
  44.         long start=System.currentTimeMillis();   
  45.         e.run();   
  46.         long stop=System.currentTimeMillis();   
  47.         long sleepTime=(stop-start);   
  48.         System.out.println(sleepTime);   
  49.         assert(sleepTime>1000);   
  50.         assert(sleepTime>1000);   
  51.         assert(commandExecuted);   
  52.     } /* Test of execute method, of class SleepCommand. */  
  53.        
  54. }  
分享到:
评论

相关推荐

    第12章 多线程程序设计.ppt

    第12章 多线程程序设计.ppt第12章 多线程程序设计.ppt

    java多线程设计模式详解(PDF及源码)

    Phase Termination——快把玩具收拾好,去睡觉吧 第11章 Thread-Specific Storage——每个线程的保管箱 第12章 Active Object——接受异步消息的主动对象 总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B...

    易语言源码多线程多任务下载软件.rar

    《易语言源码多线程多任务下载软件》是一款基于易语言编程的高效下载工具,其核心特性在于利用多线程技术实现多个文件的同时下载,提高下载效率,满足用户快速批量下载的需求。本文将深入探讨易语言编程环境、多线程...

    C++面向对象多线程编程

    《C++面向对象多线程编程》共分13章,全面讲解构建多线程架构与增量多线程编程技术。第1章介绍了用于构建面向对象程序的不同类型...第12章简单介绍多线程应用程序的测试技术。第13章对全书内容进行扼要地回顾与思考。

    Java多线程设计模式上传文件

    Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...

    java多线程设计模式_java_设计模式_多线程_多线程课题_

    Java多线程设计模式是Java开发中的核心概念,它涉及到如何高效、安全地在多个执行线程之间共享资源和协调任务。设计模式是解决特定问题的成熟方案,它们是编程经验的结晶,可以帮助开发者在面临多线程挑战时快速找到...

    socket 多线程 例程 非阻塞模式

    在这个"socket多线程例程非阻塞模式"的示例中,我们将深入探讨如何在Windows平台上实现多线程的socket通信,并了解非阻塞模式的工作原理。 首先,让我们来理解Socket的基本概念。Socket是进程间通信(IPC)的一种...

    嵌入式Linux应用程序开发第9章多线程编程

    "嵌入式Linux应用程序开发第9章多线程编程" 本章主要讲解了 Linux 中的多线程编程,包括 Linux 线程的基本概念、创建及使用、属性设置、同步与互斥问题的处理等内容。通过学习本章,读者将掌握 Linux 中线程的基本...

    C++面向对象多线程编程(part2)

    (此书包含2个部分,大家下载时注意) 全书共分13章,全面讲解构建多线程...第12章简单介绍多线程应用程序的测试技术。第13章对全书内容进行扼要地回顾与思考。 本书适合用C++创建多线程组件和应用框架的程序员阅读。

    Java多线程编程实战指南(设计模式篇)

    《Java多线程编程实战指南(设计模式篇)》由黄文海撰写,是一本深入探讨Java多线程编程和设计模式的专业书籍。书中详细介绍了如何在Java环境中利用多线程来实现高效的并发处理,同时结合设计模式,帮助开发者更好地...

    多线程测试(是多线程的测试,对学习多线程的朋友有用)

    在编程领域,多线程是一种常见的技术,它允许程序同时执行多个任务,从而提高系统效率和响应速度。...通过深入理解C#的多线程机制,并利用各种测试工具和方法,开发者可以构建出强大且可靠的多线程应用程序。

    Java多线程设计模式(带源码)

    Java多线程设计模式是Java开发中的重要领域,它涉及到并发编程、系统性能优化以及程序的稳定性。在Java中,多线程允许程序同时执行多个任务,极大地提升了程序的执行效率。本资源提供了详细的Java多线程设计模式的...

    java多线程设计模式详解.pdf

    7. 响应式编程模式:虽然更多地与现代Web开发相关,但响应式设计模式也可以在多线程编程中使用,特别是在涉及到事件驱动和消息传递的场景。 由于没有具体的内容可以参考,以上知识点仅是对标题和描述内容的合理推测...

    .NET多线程实例

    .NET框架的多线程技术是开发高性能应用程序的关键组成部分,特别是在处理并发操作、并行计算以及UI更新时。在.NET 2.0版本中,多线程功能已经得到了充分的优化和增强,允许开发者构建出更加高效的应用程序。下面将...

    Delphi多线程详解_delphi_delphi多线程_多线程_

    Delphi,作为一个流行的Object Pascal开发环境,提供了丰富的工具和库来支持多线程编程。本篇文章将深入探讨Delphi中的多线程技术,包括其原理、实现方式以及在实际开发中的应用。 一、多线程概念 多线程是指在一个...

    C#多线程互斥实例 多线程获取同一变量

    在编程领域,多线程是实现并发执行任务的重要机制,特别是在现代计算机系统中,多核处理器使得多线程成为提高程序性能的关键手段。C#语言提供了丰富的多线程支持,让我们能够编写出高效的多线程应用程序。在这个"多...

    Java多线程编程实战指南 设计模式篇.rar

    设计模式则是解决常见编程问题的模板,通过应用这些模式,开发者可以构建更健壮、可维护的多线程系统。本实战指南将深入探讨如何在Java多线程环境中有效地运用设计模式。 一、Java多线程基础 1. 线程创建:Java提供...

    JAVA设计模式与JAVA多线程设计模式详解

    设计模式可以分为三大类:创建型模式(如单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式和享元模式)以及行为型模式...

Global site tag (gtag.js) - Google Analytics