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

用观查者模式传递线程状态

阅读更多

场景,某action把任务分配给N个线程,当线程完成后通知action,action返回。

 

package com.koubei.Observable;

import java.util.Observable;
import java.util.Observer;

public class Action implements Observer{

    private int count;
    
    public String execute() throws InterruptedException{
        
        new Thread(new MadeCardThread(10,this)).start();
        new Thread(new MadeCardThread(10,this)).start();
        new Thread(new MadeCardThread(10,this)).start();
        new Thread(new MadeCardThread(10,this)).start();
        
        while(count != 40){
            Thread.sleep(1000);
        }
        System.out.println("========= end =========");
        return "success";
    }

    
    public void update(Observable o, Object arg) {
        // TODO Auto-generated method stub
        if(arg instanceof Integer){
            count = count + (Integer)arg;
        }
    }
    
    public static void main(String[] args) throws InterruptedException {
        (new Action()).execute();
    }
}

class MadeCardThread extends Observable implements Runnable {

    private int count;
    
    
    public MadeCardThread(int count,Observer observer){
        this.addObserver(observer);
        this.count = count;
    }
    
    public void run() {
        // TODO Auto-generated method stub
        for(int i=0; i<count; i++){
            System.out.println(Thread.currentThread().getId() + " : " + i);
        }
        this.setChanged();
        this.notifyObservers(count);
    }
    
}

 

0
3
分享到:
评论
1 楼 mercyblitz 2010-07-23  
运行结果貌似不能反映场景。

相关推荐

    Qt设计模式之观察者模式

    除了基本的信号和槽,Qt还支持信号的参数传递和类型安全,以及异步信号和槽连接,这进一步增强了观察者模式的应用。通过`Qt::DirectConnection`,信号和槽可以同步执行;使用`Qt::QueuedConnection`,则会在接收对象...

    设计模式-观察者

    7. **其他变体**:除了基本的观察者模式,还有复合观察者模式,允许一个观察者对象包含多个观察者,以及异步观察者模式,通知过程在不同的线程中执行,以避免阻塞主线程。 在实际开发中,理解并熟练运用观察者模式...

    基于观察者模式两个activity通信

    在这个场景中,我们关注的是如何使用观察者模式(Observer Pattern)来实现Activity A和C之间的数据交互。观察者模式是一种行为设计模式,它允许一个对象(观察者)在另一个对象(被观察者)的状态改变时自动收到...

    观察者模式Demo

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动编程,使得多...

    Java观察者模式案例

    观察者模式是软件设计模式中的一种行为模式,它在对象之间定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式广泛应用于事件处理、发布订阅系统、消息...

    使用MFC实现观察者模式(Observer)同时兼顾多窗口之间传值

    在实际应用中,`TestNotify`可能是一个测试程序,用于演示如何在MFC中使用观察者模式进行事件监听和多窗口之间的值传递。这个程序可能包含了创建观察者和被观察者对象,添加观察者到被观察者列表,以及在消息触发时...

    观察者模式消息传递GameUilts

    - **使用示例**:GameUtils可能包含了如何在Unity场景中使用观察者模式的示例脚本,展示如何创建、注册和处理事件。 通过利用观察者模式,GameUtils可以帮助开发者更灵活地设计游戏逻辑,使得游戏对象能够根据其他...

    Head First 之之观察者模式

    4. **案例分析**:通过实际案例,如用户界面控件的事件处理、多线程环境下的消息传递等,深入分析观察者模式的应用场景和优势,同时讨论可能遇到的问题和解决策略。 5. **扩展与变体**:书籍可能会讨论一些观察者...

    委托实现观察者模式

    观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在软件开发中广泛应用,特别是在事件驱动编程和异步处理中。C#...

    多线程(21)观察者模式1

    总的来说,观察者模式在多线程环境中提供了对线程状态的监控能力,使得开发者能够更好地管理和控制线程的生命周期,从而提高程序的可维护性和可靠性。通过使用接口和枚举,我们可以灵活地扩展和定制线程的行为,而`...

    观察者模式

    5. **应用场景**:观察者模式广泛应用于各种领域,如用户界面的事件处理、多线程同步、消息队列等。例如,在GUI编程中,当用户点击按钮时,按钮对象作为主题,可以通知所有关联的观察者(如窗口、菜单等)进行相应...

    java内置的观察者模式demo

    观察者模式是软件设计模式中的一种行为模式,它允许一个对象(称为被观察者)在状态发生改变时通知其他对象(称为观察者)。在Java中,观察者模式得到了内置支持,主要体现在`java.util.Observable`类和`java.util....

    Android设计模式之观察者模式

    在Android系统中,事件驱动编程、数据绑定以及UI组件的状态变化等场景都离不开观察者模式。 **一、观察者模式的基本概念** 1. **主题(Subject)**:也称为被观察者,它是所有观察者共同关注的对象,负责保存观察...

    Android ListView 多线程下载 观察者模式更新

    本篇将深入探讨如何利用多线程技术以及观察者模式来解决这个问题。 首先,多线程是Android中处理耗时操作的关键技术。在ListView中,如果每个条目都直接进行网络下载,会占用主线程(UI线程)资源,使得界面无法...

    观察者模式下载3完成篇

    通过观察者模式,实现了下载状态的实时更新与传递,自定义View提供了直观的用户交互,而下载功能的实现则展示了Android网络编程及数据持久化的应用。这个项目对于理解和实践这些概念具有很高的参考价值。

    观察者模式for android demo

    5. **EventBus**:另一种在Android中实现观察者模式的方式是使用第三方库EventBus,它可以替代基于BroadcastReceiver的事件传递,简化事件发布和订阅的过程。 6. **回调函数**:在Android开发中,我们也经常使用回...

    android 观察者模式

    在Android开发中,观察者模式(Observer Pattern)是一种行为设计模式,它允许对象在其状态发生变化时通知其他对象。这种模式广泛应用于数据绑定、事件处理和实时系统,使得系统中的组件可以松散耦合,提高代码的...

    观察者模式下载1起始篇

    在观察者模式下,下载任务通常运行在一个后台线程中,避免阻塞UI线程,同时通过发布状态更新到主线程,确保在用户界面上的显示是及时且安全的。 为了实现这个功能,我们需要做以下几步: 1. 定义一个DownloadTask类...

Global site tag (gtag.js) - Google Analytics