Java怎么实现监听者模式(java,开发技术)

时间:2024-05-09 09:44:28 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

代码展示

Java怎么实现监听者模式

Main:测试类

ObServer:每个被监听的对象实现该接口,重写该方法,完成自己的业务

publicinterfaceObServer{/***当某一个被监控的对象发生变化时*所有实现该方法处理方法*/voidexceptionHandler();}

Subject:监听者容器

publicinterfaceSubject{/***添加被观察对象*/voidadd(ObServerobServer);/***通知所有被观察者完成自己的exceptionHandler方法*/voidnotifyAllSubject();}

SubjectHandler:监听者容器的实现类

publicclassSubjectHandlerimplementsSubject{/***存放被监听对象*/privatestaticfinalList<ObServer>SUBJECTS=Collections.synchronizedList(newLinkedList<>());@Overridepublicvoidadd(ObServersubject){SUBJECTS.add(subject);}@OverridepublicvoidnotifyAllSubject(){SUBJECTS.forEach(ObServer::exceptionHandler);}}

Thread1、Thread2 测试对象

模拟两个线程对数据库操作,若Threa1执行时出异常了,那么终止所有线程并对其回滚。

Threa1:

publicclassThread1implementsObServer,Runnable{@SneakyThrows@Overridepublicvoidrun(){System.out.println("thread1run");Thread.sleep(1000);System.out.println("t1end");}@SneakyThrows@OverridepublicvoidexceptionHandler(){System.out.println("thread1rollback.....");}}

Thread2:

publicclassThread2implementsObServer,Runnable{privatestaticThreadCURRENT_THREAD;privatestaticvolatilebooleanFLAG=false;@SneakyThrows@Overridepublicvoidrun(){CURRENT_THREAD=Thread.currentThread();System.out.println("thread2running");intcount=0;while(!FLAG){System.out.println(count);count++;}System.out.println("thread2end");}@SneakyThrows@OverridepublicvoidexceptionHandler(){FLAG=true;CURRENT_THREAD.interrupt();System.out.println("thread2rollback.....");}}

测试Demo

publicstaticvoidmain(String[]args)throwsInterruptedException{//创建监听容器Subjectsubject=newSubjectHandler();Thread1thread1=newThread1();Thread2thread2=newThread2();subject.add(thread1);subject.add(thread2);CompletableFuture.supplyAsync(()->{newThread(thread1).start();try{Thread.sleep(10);inta=1/0;//模拟线程1报错}catch(InterruptedExceptione){e.printStackTrace();}returntrue;}).exceptionally((error)->{subject.notifyAllSubject();returnfalse;});CompletableFuture.supplyAsync(()->{newThread(thread2).start();returntrue;}).exceptionally((error)->{subject.notifyAllSubject();returnfalse;});//mainthreadawaitThread.sleep(60*1000);}

测试结果

Java怎么实现监听者模式

在 java.util 包下提供了Observable(监听容器)和 Observer接口(被监听者),用法跟我们完全一致,只需实现Observer的update方法,把每个Observer子类添加到监听容器中。

注意:在调用监听容器的通知所有servers时首先调用一下其setChanged方法

Java怎么实现监听者模式

将changed变为true(默认flase)

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Java怎么实现监听者模式的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Swift如何绘制渐变色下一篇:

17 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18