`
- 浏览:
61493 次
- 来自:
...
-
《敏捷软件开发》第12章 AcitveObject模式构建多线程
看了我好久才看懂的代码。
ActiveObjectEngine.java
- package active;
-
-
-
-
-
- import java.util.LinkedList;
-
- public class ActiveObjectEngine {
-
- LinkedList itsCommands = new LinkedList();
-
- public void addCommand(Command c) {
- itsCommands.add(c);
- }
-
- public void run() {
- while (!itsCommands.isEmpty()) {
- Command c = (Command) itsCommands.getFirst();
- itsCommands.removeFirst();
- try {
- c.execute();
- } catch (Exception e) {
- }
- }
- }
- }
Command.java
- package active;
-
-
-
-
-
- public interface Command {
- public void execute() throws Exception;
- }
DelayedTyper.java
- package active;
-
-
-
-
-
- public class DelayedTyper implements Command{
- private long itsDelay;
- private char itsChar;
- private static ActiveObjectEngine engine=new ActiveObjectEngine();
- private static boolean stop=false;
-
- public static void main(String args[]) throws Exception{
- engine.addCommand(new DelayedTyper(100,'1'));
- engine.addCommand(new DelayedTyper(300,'3'));
- engine.addCommand(new DelayedTyper(500,'5'));
- engine.addCommand(new DelayedTyper(700,'7'));
-
- Command stopCommand=new Command(){
- public void execute(){
- stop=true;
- }
- };
-
- engine.addCommand(new SleepCommand(20000,engine,stopCommand));
- engine.run();
- }
-
- public DelayedTyper(long delay,char c){
- itsDelay=delay;
- itsChar=c;
- }
-
- public void execute() throws Exception{
- System.out.print(itsChar);
- if(!stop){
- delayAndRepeat();
- }
- }
-
- public void delayAndRepeat() throws CloneNotSupportedException{
- engine.addCommand(new SleepCommand(itsDelay,engine,this));
- }
- }
SleepCommand.java
- package active;
-
-
-
-
-
- public class SleepCommand implements Command{
- private Command wakeupCommand=null;
- private ActiveObjectEngine engine=null;
- private long sleepTime=0;
- private long startTime=0;
- private boolean started=false;
-
- public SleepCommand(long milliseconds,ActiveObjectEngine e,Command wakeupCommand){
- sleepTime=milliseconds;
- engine=e;
- this.wakeupCommand=wakeupCommand;
- }
-
- public void execute() throws Exception{
- long currentTime=System.currentTimeMillis();
- if(!started){
- started=true;
- startTime=currentTime;
- engine.addCommand(this);
- }else if((currentTime-startTime)
- engine.addCommand(this);
- }else{
- engine.addCommand(wakeupCommand);
- }
- }
- }
SleepCommandTest.java
- package active;
-
- import org.junit.After;
- import org.junit.AfterClass;
- import org.junit.Before;
- import org.junit.BeforeClass;
- import org.junit.Test;
- import static org.junit.Assert.*;
-
-
-
-
-
- public class SleepCommandTest {
-
- public SleepCommandTest() {
- }
-
- @BeforeClass
- public static void setUpClass() throws Exception {
- }
-
- @AfterClass
- public static void tearDownClass() throws Exception {
- }
-
- @Before
- public void setUp() throws Exception {
- }
-
- @After
- public void tearDown() throws Exception {
- }
- public boolean commandExecuted=false;
- @Test
- public void execute() throws Exception {
- Command wakeup=new Command(){
- public void execute(){commandExecuted=true;}
- };
-
- ActiveObjectEngine e=new ActiveObjectEngine();
- SleepCommand c=new SleepCommand(1000,e,wakeup);
- e.addCommand(c);
- long start=System.currentTimeMillis();
- e.run();
- long stop=System.currentTimeMillis();
- long sleepTime=(stop-start);
- System.out.println(sleepTime);
- assert(sleepTime>1000);
- assert(sleepTime>1000);
- assert(commandExecuted);
- }
-
- }
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
第12章 多线程程序设计.ppt第12章 多线程程序设计.ppt
Phase Termination——快把玩具收拾好,去睡觉吧 第11章 Thread-Specific Storage——每个线程的保管箱 第12章 Active Object——接受异步消息的主动对象 总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B...
《易语言源码多线程多任务下载软件》是一款基于易语言编程的高效下载工具,其核心特性在于利用多线程技术实现多个文件的同时下载,提高下载效率,满足用户快速批量下载的需求。本文将深入探讨易语言编程环境、多线程...
《C++面向对象多线程编程》共分13章,全面讲解构建多线程架构与增量多线程编程技术。第1章介绍了用于构建面向对象程序的不同类型...第12章简单介绍多线程应用程序的测试技术。第13章对全书内容进行扼要地回顾与思考。
Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...
Java多线程设计模式是Java开发中的核心概念,它涉及到如何高效、安全地在多个执行线程之间共享资源和协调任务。设计模式是解决特定问题的成熟方案,它们是编程经验的结晶,可以帮助开发者在面临多线程挑战时快速找到...
在这个"socket多线程例程非阻塞模式"的示例中,我们将深入探讨如何在Windows平台上实现多线程的socket通信,并了解非阻塞模式的工作原理。 首先,让我们来理解Socket的基本概念。Socket是进程间通信(IPC)的一种...
"嵌入式Linux应用程序开发第9章多线程编程" 本章主要讲解了 Linux 中的多线程编程,包括 Linux 线程的基本概念、创建及使用、属性设置、同步与互斥问题的处理等内容。通过学习本章,读者将掌握 Linux 中线程的基本...
(此书包含2个部分,大家下载时注意) 全书共分13章,全面讲解构建多线程...第12章简单介绍多线程应用程序的测试技术。第13章对全书内容进行扼要地回顾与思考。 本书适合用C++创建多线程组件和应用框架的程序员阅读。
《Java多线程编程实战指南(设计模式篇)》由黄文海撰写,是一本深入探讨Java多线程编程和设计模式的专业书籍。书中详细介绍了如何在Java环境中利用多线程来实现高效的并发处理,同时结合设计模式,帮助开发者更好地...
在编程领域,多线程是一种常见的技术,它允许程序同时执行多个任务,从而提高系统效率和响应速度。...通过深入理解C#的多线程机制,并利用各种测试工具和方法,开发者可以构建出强大且可靠的多线程应用程序。
Java多线程设计模式是Java开发中的重要领域,它涉及到并发编程、系统性能优化以及程序的稳定性。在Java中,多线程允许程序同时执行多个任务,极大地提升了程序的执行效率。本资源提供了详细的Java多线程设计模式的...
7. 响应式编程模式:虽然更多地与现代Web开发相关,但响应式设计模式也可以在多线程编程中使用,特别是在涉及到事件驱动和消息传递的场景。 由于没有具体的内容可以参考,以上知识点仅是对标题和描述内容的合理推测...
.NET框架的多线程技术是开发高性能应用程序的关键组成部分,特别是在处理并发操作、并行计算以及UI更新时。在.NET 2.0版本中,多线程功能已经得到了充分的优化和增强,允许开发者构建出更加高效的应用程序。下面将...
Delphi,作为一个流行的Object Pascal开发环境,提供了丰富的工具和库来支持多线程编程。本篇文章将深入探讨Delphi中的多线程技术,包括其原理、实现方式以及在实际开发中的应用。 一、多线程概念 多线程是指在一个...
在编程领域,多线程是实现并发执行任务的重要机制,特别是在现代计算机系统中,多核处理器使得多线程成为提高程序性能的关键手段。C#语言提供了丰富的多线程支持,让我们能够编写出高效的多线程应用程序。在这个"多...
设计模式则是解决常见编程问题的模板,通过应用这些模式,开发者可以构建更健壮、可维护的多线程系统。本实战指南将深入探讨如何在Java多线程环境中有效地运用设计模式。 一、Java多线程基础 1. 线程创建:Java提供...
设计模式可以分为三大类:创建型模式(如单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式和享元模式)以及行为型模式...