监视器其实就是当某个事件完成后,自动监控到该情况然后去执行你想要的操作。

举个例子吧,我们在浏览器里在下载东西,然后你点击了后台下载,当下载结束后,浏览器会弹窗告诉你下载完成了,我们就写段简单的代码来抽象的实现这个小需求。

首先写一个IListener接口,IListener.java:

package listenertest3;public interface IListener {public void afterDownLoad(DownLoadEvent event);}

然后是实现了IListener接口的DownLoadListener.java:

package listenertest3;public class DownLoadListener implements IListener {@Overridepublic void afterDownLoad(DownLoadEvent event) {System.out.println(event.getFileName() + " download finished");}
}

写一个下载事件类DownLoadEvent.java,里边有文件名称以及是否下载完成两个属性:

package listenertest3;public class DownLoadEvent {private String fileName;private boolean isFinish = false;public DownLoadEvent(String fileName) {this.fileName = fileName;}public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}public boolean isFinish() {return isFinish;}public void setFinish(boolean isFinish) {this.isFinish = isFinish;}
}

接下来是事件发生类DownLoadFile.java,在其中的download方法中首先打印出start download,然后暂停1000ms代表下载,之后下载完成,将下载事件中的下载是否完成属性设成true,然后就会执行listerner中的afterDownLoad方法:

package listenertest3;public class DownLoadFile {private IListener listener;public IListener getListener() {return listener;}public void setListener(IListener listener) {this.listener = listener;}public void download() throws InterruptedException {DownLoadEvent event = new DownLoadEvent("No Man Land");System.out.println("start download");Thread.sleep(1000);event.setFinish(true);listener.afterDownLoad(event);}
}

最后是main方法:

package listenertest3;public class MainTest {public static void main(String[] args) throws InterruptedException {DownLoadFile downloadFile = new DownLoadFile();downloadFile.setListener(new DownLoadListener());downloadFile.download();}
}

运行结果如下:

用java自己实现一个监视器相关推荐

  1. 怎么在java中关闭一个thread

    怎么在java中关闭一个thread 我们经常需要在java中用到thread,我们知道thread有一个start()方法可以开启一个线程.那么怎么关闭这个线程呢? 有人会说可以用Thread.st ...

  2. thread java 关闭_怎么在java中关闭一个thread

    怎么在java中关闭一个thread 我们经常需要在java中用到thread,我们知道thread有一个start()方法可以开启一个线程.那么怎么关闭这个线程呢? 有人会说可以用Thread.st ...

  3. java 监控对象是什么_多线程-Java中的对象监视器是什么意思? 为什么要使用这个词?...

    多线程-Java中的对象监视器是什么意思? 为什么要使用这个词? 在阅读有关Java线程的文章时,我经常注意到这样的表达:"当前线程是该对象的监视器的所有者". 我的意思是:线程有 ...

  4. java编程游戏飞机旋转问题_用JAVA写的一个飞机游戏

    根据网上视频教程,用JAVA写的一个飞机程序.先看效果先: 改程序主要应用了面向对象的方法构建,使用了AWT技术和一些双缓冲技术 关键有几个点: 一.双缓冲技术,防止重画造成的屏幕闪烁,可以直接用 p ...

  5. Java:判断一个字符串中是否存在另一个字符子串以及判断一个字符串中是否存在指定字符

    Java:判断一个字符串中包含指定字符子串,判断一个字符串中存在指定字符 字符串的contains方法可以判断一个字符串中是否存在另一个字符子串,示例如下 String Str = "Hel ...

  6. 转Java转iOS-第一个项目总结(2):遇到问题和解决方案

    目录 1.UITableView滑动卡顿的优化 2.右滑手势返回 3.添加页面统计 4.debug版和release版 5.关于页面刷新 6.关于页面布局 7.推荐博客 遇到问题和解决方案 本文是Ja ...

  7. 如何在Java中创建一个新的List

    本文翻译自:How to make a new List in Java We create a Set as: 我们创建一个Set为: Set myset = new HashSet() How d ...

  8. JAVA同时输入用户名和密码_用java模拟设计一个简单的“用户注册”程序。当用户输入用户名和密码时,单击“注...

    用java模拟设计一个简单的"用户注册"程序.当用户输入用户名和密码时,单击"注 2020 - 9 - 26 TAG : 所有功能均已实现,如有不满意的地方我再修改imp ...

  9. java写一个外网访问的接口_【JAVA基础】一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)...

    0 前言 初学JAVA时,总会对一些概念一知半解,相互混淆,不明其设计的用意,如类.对象.重载.封装.继承.多态.覆盖.抽象类.接口概念.为便于理解和巩固,本文将基于一个案例及其变形,展现各个概念的定 ...

最新文章

  1. VS2015不显示工程文本信息
  2. 解决 java “错误:编码GBK 的不可映射字符”
  3. Angular 一个简单的指令实现 阻止事件扩散
  4. React系列---React+Redux工程目录结构划分
  5. pdf复制乱码_一键解决PDF转换问题,这个网站好用到爆!
  6. linux 修改hostname
  7. android中止线程_Android如何结束并重启线程? | 学步园
  8. linux 安装vbox增强工具
  9. hana 查看表字段_hana 查看表数据库
  10. 软件实施提升效率的五个工具
  11. JWPlayer Uncaught Error: Invalid SRT file
  12. Linux内核源代码分析——swap实现
  13. 研发管理和项目管理有哪些痛点?
  14. 豆瓣9.6分,Scala编程圣经第5版隆重来袭
  15. office2016+visio2016
  16. redis安装及运行
  17. 使用C#开发Excel插件
  18. No query specified(Mysql数据库报错)
  19. linux学习lesson16
  20. Hive 如何设置ReduceTask的数量

热门文章

  1. 计算机存储标密文件,机关单位计算机保读密管理.doc
  2. 煽情的儿子552=随笔
  3. 小鸡吃米java_小班语言活动:小鸡吃米
  4. java程序设计基础_陈国君版第五版_第五章习题
  5. 入口思维:刚需、频次、免费、变现
  6. 周末自制了一个批量图片水印添加器!
  7. android 微博发布,手机上怎么用微博?手机如何发广播?
  8. flex 查查你的号码归属地
  9. 东芝存储器控股公司将通过优先股和贷款进行1.2万亿日元融资
  10. L No 114514