java多线程学习2:线程的生命周期监听-Observer模式

Oracle DBA转OceanBase:从多进程到单进程多线程的架构思维转变 传统关系型数据库多采用多进程架构,每个后台进程承担特定职责,运维习惯围绕进程展开。而现代分布式数据库则普遍采用单进程多线程模型,将并发控制、事务处理、日志管理等能力收敛于一个核心进程内,以降低上下文切换开销并提升横向扩展能力。这种架构差异直接影响数据库的运维诊断与性能调优方式。对于长期使用Oracle的DBA而言,理解进程与线程的映射关系,掌握observer进程、租户模型及内部视图的新排查路径,是顺利过渡到OceanBase的关键。本文从架构底层层层剖析,帮助读者快速建立分布式数据库的运维思维框架。 阅读详情

1先说说这个Observer模式
常说的观察者模式或listener模式。
常用的就是MQ中的消息接收监听、spring/spring mvc中的容器刷新监听等待。

用一句话来说,注册自己感兴趣的事件源。下面画个uml图

这里写图片描述
简陋一点 但有内涵。

观察者:关注自己的业务,等待事件出发

事件:触发后,主动调用观察者

在工作中.observer模式能解决很多的问题,比如说状态变化的监控、回调通知等等。

贴下代码:

Lisenter 观察者的抽象

package com.puqiuyu.thread.blog;


public interface Listener {

    void  onEvent(RunnableEvent runnableEvent);
}

通知消息

package com.puqiuyu.thread.blog;

public class RunnableEvent {
    private String name;
    private RunnableState state;
    private Throwable e;

    public RunnableEvent(String name,RunnableState state,Throwable e) {
        this.name = name;
        this.state = state;
        this.e = e;
    }
    public String getName() {
        return name;
    }
    public RunnableState getState() {
        return state;
    }
    public Throwable getE() {
        return e;
    }
    public enum RunnableState{
        RUNNING,DEAD,ERROR;
    }
}

具体的观察者

public class ThreadLifeCycleListener implements Listener{
    @Override
    public void onEvent(RunnableEvent runnableEvent) {
        System.out.println("thread : "+ runnableEvent.getName());
        System.out.println("status : " + runnableEvent.getState());
        System.out.println("error : " + runnableEvent.getE());
    }

}

具体的事件

package com.puqiuyu.thread.blog;

import java.util.LinkedList;

import com.puqiuyu.thread.blog.RunnableEvent.RunnableState;

public class ObserverThread extends Thread{

    public ObserverThread(String name) {
        super(name);
    }

    private LinkedList<Listener> listeners = new LinkedList<>();

    public synchronized void addListener(Listener listener) {
        listeners.add(listener);
    }

    private void notifyListener(RunnableEvent runnableEvent){
        for (Listener listener : listeners) {
            listener.onEvent(runnableEvent);
        }
    }

    @Override
    public void run() {
        try {
            notifyListener(new RunnableEvent(Thread.currentThread().getName(),RunnableState.RUNNING, null));
            //dosomthing
            System.out.println(Thread.currentThread().getName() + " do something...");
            Thread.sleep(10_000L);
            notifyListener(new RunnableEvent(Thread.currentThread().getName(),RunnableState.DEAD, null));
        } catch (InterruptedException e) {
            notifyListener(new RunnableEvent(Thread.currentThread().getName(),RunnableState.ERROR, e));
        }
    }
}
面向对象的动态建模:时间维度下的对象生命周期与状态演进 面向对象编程的本质并非静态类结构设计,而是在真实业务时间流中对对象生命周期、协作关系与状态演进的系统性建模。其核心原理在于将对象视为‘事件响应+状态变迁+能力契约’的动态凝结体,而非属性集合。这种动态性带来关键的技术价值:提升系统在高并发、多变业务(如电商秒杀、物流状态流转)下的可维护性与弹性。典型应用场景包括订单状态机、库存协同、医疗预约流程等需强时序约束的领域。本文聚焦‘时间脚印’这一实践视角,深入解析对象在左右(协作)、上下(层次)、前后(状态)三维坐标系中的落地逻辑,并结合Java/Spring生态 阅读详情

相关推荐

Java中使用监听器模型实现线程协调

Java中使用监听器模型实现线程协调 要求生产者产生0-9的整数,将它存在Box对象中并打印,消费者从箱子中取出数字,并打印。 限制条件:生产者放一个,消费者取一个,不允许出现生产太快或者消费太快的情况 public class Box { private int data ; //数据 private boolean available = false ; //表示数据是否可用 public synchronized void put(int value){ w

nuist_NJUPT的博客 317

Java监听器详解

一.监听器的定义 是指专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生变化时,立即采取相应的行动。 Web应用当中监听器是什么? web监听器由servlet规范提供的,它可以监听客户端的请求,服务端的操作,监听的对象包括ServletContext,HttpSession,ServletRequest三个预对象(内置对象),分别对应aplication,s...

抬山的博客 2万+

Java观察者模式详解与实战应用

Observable是一个抽象类,位于java.util包下,其主要职责是作为可观察对象的基础模板,封装了观察者列表管理、状态变更标记及通知分发等通用逻辑。它采用“推”模型(push model),即当目标对象状态变化时,主动将数据推送给所有注册的观察者。类结构上,Observable维护了一个类型的观察者集合。选择Vector而非ArrayList的原因在于前者是线程安全的,这为多线程环境下添加或删除观察者的操作提供了基础保障。

weixin_42513928的博客 1131

多线程之设计模式之Listener设计模式(观察者设计模式)

虽然设计模式我们一般中用的很少,但是作为程序员设计模式是我们自我修养的一部分,so最近学习了一个设计模式.记下来喽: 观察者模式(有时又被称为模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现...

weixin_39715061的博客 3666

线程+监听技术 简单的例子 和详细讲解

监听器配置,java监听器,登陆监听,Listener,struts监听器配置,用户在线统计  所谓线程(或称线索,thread),指程序中的以单一的顺序控制流。线程按顺序执行,即在一个线程中,一个时刻只能由一个执行点。显然,按传统方法设计的程序,无论是单道执行的程序,还是由多个进程并发执行的多道程序,就每个程序本身而言,都是由单线程组成的。

多线程多任务下载,可查看任务进度

多线程多任务下载,可以查看任务进度,可用来直接使用

java的观察者模式(有点监听器的感觉),Thread和Runnable的区别

这里面有两个概念: Obserable 为被观察的人, Observer  为观察的人,当被观察的人做了特定的工作之后,观察者就激活了。 直接上代码:被观察者 package com.flyread.thread; import java.util.Iterator; import java.util.Observable; import java.util.Queue;

masterShaw的博客 2740

软考29-上午题-【数据结构】-排序

数据结构7种排序

qq_31532983的博客 1579

基于spring的异步线程返回结果监听:ThreadPoolTaskExecutor

你想拿到异步处理的结果,但是你又不想主线程一直堵塞在那边等异步结果的返回。

白银の王二 493

SigFit实战:从FEA到光学仿真的热力耦合分析全流程解析

在光机系统与芯片封装等精密工程领域,热与力的耦合效应是影响产品性能与可靠性的核心物理问题。有限元分析(FEA)是预测结构在热、力载荷下变形与应力的基础工具,但其结果通常无法直接用于评估光学性能。这需要一座桥梁,将物理场数据转化为光学设计语言。其核心原理在于数据映射与面形表征技术,例如通过泽尼克多项式拟合,将离散的节点位移分解为离焦、像散等标准光学像差。这项技术的工程价值在于,它实现了多物理场仿真的闭环,使工程师能在设计阶段精准预测热变形或应力对波前误差、调制传递函数等关键光学指标的影响。其典型应用场景包括高

weixin_28630185的博客 343

SAP FICO 资产会计AA后台配置 (上)

输入折旧表“CZ11”如有外币计价的资产,则需指定外币计价的资产折旧范围,以及规则。因为在设置资产类型时,需指定一个对应的 资产编号范围、资产账户确定类型(便于分配自动会计科目)、屏幕格式规则(便于设置资产字段必填与否)。因为在设置资产类型时,需指定一个对应的 资产编号范围、资产账户确定类型(便于分配自动会计科目)、屏幕格式规则(便于设置资产字段必填与否)。新增资产类型:Z101 固定资产-房屋及建筑物新增资产类型:Z301 固定资产-房屋及建筑物。

ghgxm520的博客 1762

Java设计模式(五) Observer(观察者)模式及Tomcat引申

基本概念Observer 观察者模式(Observer Pattern)又称为发布订阅模式(Publish/subscribe) 定义对象间的一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并且自动更新 根据单一职责原则,每个类的职责是单一的,我们可以通过触发机制,形成一个触发链,把各个单一的职责串联成真实世界中的复杂的逻辑关系。 观察者模式的角色分工(JDK中提供了

llin-黎辰 6644

RV1126双摄IMX577驱动移植避坑:从RK3588到RV1126的dts配置与内存崩溃解决实录

本文详细记录了在RV1126平台上移植RK3588的IMX577双摄驱动的完整过程,重点解决了dts配置与内存崩溃问题。通过分析硬件架构差异、驱动移植关键点及CMA内存越界问题,提供了两种有效解决方案,并分享了双摄同步优化与网络调试的实战经验,为嵌入式视觉系统开发提供实用参考。

weixin_42641741的博客 405

Java观察者模式详解:原理、实现与应用场景

观察者模式是软件设计中常用的行为型模式,它定义了对象间的一对多依赖关系,当被观察对象状态变化时自动通知所有依赖对象。该模式通过解耦观察者和被观察者,实现了松耦合设计,广泛应用于事件处理、消息通知等场景。Java标准库提供了Observable/Observer基础实现,但在实际开发中需要注意线程安全和扩展性问题。现代Java开发中,观察者模式常结合Spring事件机制、响应式编程等技术,在GUI开发、微服务架构、CQRS模式等场景发挥重要作用。掌握观察者模式的核心原理和最佳实践,能够帮助开发者构建更灵活、可

weixin_30892763的博客 359

双轴按键摇杆模块原理与嵌入式驱动实战

双轴按键摇杆是一种融合模拟量(X/Y轴)与数字量(Z轴按键)的复合型人机交互传感器,其本质基于电位器分压原理与机械开关通断特性。通过ADC采集连续电压信号并结合数字IO检测按键状态,可实现高鲁棒性的二维运动感知与触发控制。该方案技术门槛低、成本可控、兼容性强,广泛应用于智能小车、DIY游戏手柄、工业HMI及教育开发板等嵌入式场景。文中深入解析电位器线性度、KEY引脚开漏特性、ADC参考电压稳定性及软件消抖状态机等关键工程要素,为基于Arduino、STM32或ESP32平台的快速集成提供可复用的技术路径。

weixin_30995917的博客 84

海思HiMPP开发避坑指南:MMZ内存与系统内存傻傻分不清?一个例子讲透

本文深入解析海思HiMPP开发中MMZ内存与系统内存的关键差异与应用场景,帮助开发者避免常见的内存混淆问题。通过实际案例和性能对比,详细介绍了MMZ内存的特性和优化策略,提升多媒体处理效率。

weixin_30772105的博客 469

**观察者模式(Observer Pattern)**,一种行为型设计模式,也被称为“发布-订阅模式(Publish-Subscribe)”的简化版

- “Pub/Sub 是观察者模式的升级版” —— 不准确。二者目标一致(解耦通知),但**解决的问题域不同**:Observer 解决**单进程内对象协作**,Pub/Sub 解决**系统级松散集成**。 - 很多前端库(如 Vue 的 `EventBus`、RxJS 的 `Subject`)虽名含 “Subject”,实为模拟 Pub/Sub 的轻量中介,已脱离经典 Observer 的直连结构。 -

[Blog][Domain] programb.blog.youkuaiyun.com 609

【首份】2023年30米分辨率土地利用遥感监测数据

为了恢复和重建我国土地利用变化的现代过程,更好地预测、预报土地利用变化趋势,地球资源数据云以美国陆地卫星Landsat 遥感影像数据作为主信息源,结合Sentinel系列数据,通过人工目视解译和机器学习方法,建立了国家尺度1:10 万比例尺多时期土地利用/土地覆盖遥感监测数据库(CNLUCC)因早期Landsat数据时空覆盖缺失,1972-1977年合成第一期数据,1978-1985年合成第二期数据,1986年起每年度生成一期数据。投影:Albers正轴等面积双标准纬线圆锥投影南标准纬线:25°N。

地球资源数据云的官方博客 3686

Java设计模式(四)——再谈观察者模式

在本系列的上一篇文章中,我们讨论了JDK对于观察者模式的一套实现。今天我们将要从另一个角度来探索Tomcat中是如何利用观察者模式加载各个组件。不过今天的任务不是解释Tomcat,所以我会单独把重点抽象出来展现如何在一个实际利用中使用Observer。 先谈一下我对观察者模式的理解。对于对象而言,观察似乎是一个主动的过程——多位观察者通过“观察”一个被观察对象状态的改变来触发一些自身的行为。是的...

weixin_30590285的博客 67

OBC_开环扫频波特图拟合操作流程(结合 Simulink)

摘要: 本文详细介绍了基于Simulink的开环扫频波特图测试与拟合流程,适用于电源/控制系统(如LLC/PFC)的小信号分析。主要内容包括:1)前期准备(测试点选择、信号范围设定);2)Simulink建模方法(信号注入、数据记录);3)两种扫频方式(逐频正弦/Chirp扫频)的实现;4)MATLAB数据处理(FFT分析、传递函数拟合);5)线性分析工具使用技巧。重点强调了激励信号幅值控制、稳态数据采集及模型验证方法,并提供完整MATLAB脚本示例。该流程可有效获取系统频域特性,为控制器设计提供可靠依据。

Sumerking的博客 234

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

设计模式入门:6. 观察者模式详解 C++实现

观察者模式是一种行为型设计模式,实现了对象间的一对多依赖关系,当被观察对象状态改变时自动通知所有观察者。本文以天气站为例详细讲解了观察者模式的实现: 核心角色:包含抽象/具体主题(Subject)和抽象/具体观察者(Observer)四部分,实现松耦合的发布-订阅机制 C++实现: 天气数据作为具体主题,维护观察者列表和天气状态 当前天气显示和统计显示作为具体观察者 通过attach/detach管理订阅关系,notifyObservers触发更新 关键优势: 低耦合:主题和观察者互不依赖具体实现 动态订阅

basketball616的博客 409

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java设计模式实战:7种核心模式解析与工程应用指南

设计模式是软件工程中解决常见设计问题的经典方案,其核心在于通过封装变化、降低耦合来提升代码的可维护性与扩展性。从原理层面看,设计模式基于面向对象的基本原则,如开闭原则、依赖倒置等,通过定义清晰的接口与抽象来隔离变化点。其技术价值在于为复杂软件系统的架构提供了经过验证的蓝图,能有效应对需求变更与系统演进,避免代码腐化为难以维护的“大泥球”。在应用场景上,无论是管理全局资源的单例模式、封装对象创建的工厂模式,还是实现算法灵活切换的策略模式,都广泛应用于框架设计(如Spring)、中间件及业务系统开发中。本文聚焦

weixin_30552811的博客 309

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

设计模式不是八股文:单例、工厂、适配器、观察者的工程实践指南

设计模式是面向对象编程中应对常见结构问题的成熟解决方案,其本质在于解耦、封装变化与提升可维护性。从单例模式对资源生命周期的可控管理,到工厂方法对对象创建逻辑的隔离;从适配器模式在异构系统(如VMware驱动、KM-Test环回适配器)集成中的桥接作用,再到观察者模式在Qt信号槽、配置变更通知等场景下的松耦合事件分发——这些模式共同构成软件架构的‘基础语法’。掌握它们的关键不在于记忆定义,而在于识别代码中的坏味道信号:重复分支、过度依赖、全局状态滥用、职责混杂与测试困难。本文聚焦C++/Qt/Java真实工程

weixin_30788619的博客 688

Java接口与匿名内部类:核心原理与实战应用

接口作为Java面向对象编程的核心概念,定义了对象间的行为契约,是实现多态和程序扩展性的关键技术。其设计遵循接口隔离原则,通过抽象方法、默认方法和静态方法等特性,支持从回调机制到服务规范等多种应用模式。匿名内部类则提供了轻量级的接口实现方式,特别适合事件处理等一次性使用场景,在Android开发中广泛应用。随着Java 8引入Lambda表达式,这种组合进一步简化了代码结构。理解接口与匿名内部类的协作机制,对于掌握Java函数式编程、设计模式实现以及Android开发中的事件处理等关键技术至关重要。

weixin_34391445的博客 395

Java设计模式核心解析与实战应用

设计模式是面向对象编程中解决特定问题的经典方案,其核心价值在于提升代码的可维护性和扩展性。创建型模式通过工厂方法、单例等模式管理对象创建;结构型模式如装饰器、代理模式关注类与对象的组合方式;行为型模式则处理对象间的交互逻辑。在Java生态中,Spring框架的BeanFactory运用工厂模式,MyBatis通过责任链模式实现插件机制。掌握策略模式与Lambda表达式的结合、观察者模式的现代化实现等技巧,能显著提升电商系统、分布式架构等场景下的开发效率。合理运用设计模式可避免过度设计,是每个Java工程师必

weixin_30437847的博客 326

provider没有听众_成为一个好的(事件)听众

Swing框架以事件侦听器的形式广泛使用了Observer模式(也称为publish-subscribe模式)。 当用户与事件进行交互时,作为用户交互目标的Swing组件会触发事件; 数据更改时,数据模型类会触发事件。 以这种方式使用Observer可使控制器与模型分离,而模型与视图分离,从而简化了GUI应用程序的开发。 “四人帮” 设计模式书(请参阅参考资料 )将观察者模式描述为定义“对...

cusi77914的博客 131
上一篇: java多线程设计模式1:读写锁模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值