Java怎么实现监听者模式
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了Java怎么实现监听者模式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。代码展示Main:测试类ObServer:每
千家信息网最后更新 2026年11月03日Java怎么实现监听者模式
这篇文章主要介绍了Java怎么实现监听者模式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
代码展示
Main:测试类
ObServer:每个被监听的对象实现该接口,重写该方法,完成自己的业务
public interface ObServer { /** * 当某一个被监控的对象发生变化时 * 所有实现该方法处理方法 */ void exceptionHandler(); }Subject:监听者容器
public interface Subject { /** * 添加被观察对象 */ void add(ObServer obServer); /** * 通知所有被观察者完成自己的 exceptionHandler 方法 */ void notifyAllSubject(); }SubjectHandler:监听者容器的实现类
public class SubjectHandler implements Subject { /** * 存放被监听对象 */ private static final List SUBJECTS = Collections.synchronizedList(new LinkedList<>()); @Override public void add(ObServer subject) { SUBJECTS.add(subject); } @Override public void notifyAllSubject() { SUBJECTS.forEach(ObServer::exceptionHandler); }} Thread1、Thread2 测试对象
模拟两个线程对数据库操作,若Threa1执行时出异常了,那么终止所有线程并对其回滚。
Threa1:
public class Thread1 implements ObServer, Runnable { @SneakyThrows @Override public void run() { System.out.println("thread1 run"); Thread.sleep(1000); System.out.println("t1 end"); } @SneakyThrows @Override public void exceptionHandler() { System.out.println("thread1 rollback....."); }}Thread2:
public class Thread2 implements ObServer, Runnable { private static Thread CURRENT_THREAD; private static volatile boolean FLAG = false; @SneakyThrows @Override public void run() { CURRENT_THREAD = Thread.currentThread(); System.out.println("thread2 running"); int count = 0; while (!FLAG) { System.out.println(count); count++; } System.out.println("thread2 end"); } @SneakyThrows @Override public void exceptionHandler() { FLAG = true; CURRENT_THREAD.interrupt(); System.out.println("thread2 rollback....."); }}测试Demo
public static void main(String[] args) throws InterruptedException { // 创建监听容器 Subject subject = new SubjectHandler(); Thread1 thread1 = new Thread1(); Thread2 thread2 = new Thread2(); subject.add(thread1); subject.add(thread2); CompletableFuture.supplyAsync(() -> { new Thread(thread1).start(); try { Thread.sleep(10); int a = 1 / 0; // 模拟线程1报错 } catch (InterruptedException e) { e.printStackTrace(); } return true; }).exceptionally((error) -> { subject.notifyAllSubject(); return false; }); CompletableFuture.supplyAsync(() -> { new Thread(thread2).start(); return true; }).exceptionally((error) -> { subject.notifyAllSubject(); return false; }); // main thread await Thread.sleep(60 * 1000); }测试结果
在 java.util 包下提供了Observable(监听容器)和 Observer接口(被监听者),用法跟我们完全一致,只需实现Observer的update方法,把每个Observer子类添加到监听容器中。
注意:在调用监听容器的通知所有servers时首先调用一下其setChanged方法
将changed变为true(默认flase)
感谢你能够认真阅读完这篇文章,希望小编分享的"Java怎么实现监听者模式"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
监听
容器
方法
对象
篇文章
测试
线程
模式
接口
观察
一致
业务
两个
代码
价值
兴趣
只需
同时
子类
数据
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
手冲咖啡和咖啡机区别
上海睿民互联网科技有限公司
奇酷互联网科技
万易互联网科技有限公司
深圳齐家互联网科技
镁科技互联网资讯平台
互联网公司会议桌创意科技软装饰
互联网 科技馆
中国互联网有什么科技含量
受益于互联网科技的高速发展
福建科技产业互联网发展
速维有品互联网信息科技(苏州)有限公司
银行科技岗属于互联网吗
美国互联网科技公司
本届互联网大会上的黑科技
山东大美朱楼互联网科技有限公司
广州梦谷互联网科技有限公司领导
广州智享互联网科技
银川新华互联网科技学校是国营吗
知域互联网科技有限公司官网
深圳市人人互联网科技有限公司
朗涯互联网科技
智慧科技互联网
天津摩尔互联网科技
互联网 视角下的科技创新
科技大学互联网专业好不好
华脉科技工业互联网产品
宁夏科技产业互联网案例
马化腾互联网科技教学
互联网科技大佬云集