监视器java

这是超人生活中的黑暗时期。 乔尔·艾尔(Jor-El)希望他继续航行,为他的最终命运做好准备。 然而,地球面临着世界末日,正义联盟需要他们的钢铁侠行动来拯救世界。 但是,由于我们只有一个超人,您不能同时做这两个事情。 同样,他不能在没有首先实现自己的命运并实现他的真正力量的情况下与厄运斗争。 我们该如何呼吁超人,而不是让这个人为所欲为。 这应该以一种有序的方式进行,其中必须等到航程完成。 我们将利用Java Monitors帮助SuperMan聆听他的K星之父,并及时回来拯救世界免遭厄运。 首先,我们定义钢铁侠。

/*** The awesome kryptonian man is represented by this class* * @author Dinuka Arseculeratne**/
public class SuperMan {private boolean onVoyage = false;/*** Schedule a voyage for Superman. Note that this method first checks whether he is* already on a voyage, and if so calls the wait() method to hault the current thread* until notify is called and onVoyage is set to false.*/public synchronized void goOnVoyage() {if (onVoyage) {try {System.out.println("SuperMan is already on a voyage. Please wait until he returns from his quest.");wait();System.out.println("His goyage is over, time for him to go on a new voyage....");} catch (InterruptedException e) {System.out.println(" I am SuperMan, i do not handle these petty exceptions");}}onVoyage = true;notify();}/*** This method calls Superman back from his current voyage. Again the method* checks whether Super man is not already on a voyage. If so the current thread is* Halted until he is schedule to go on a voyage because he needs to be on a voyage* to be called back in the first place.*/public synchronized void returnFromVoyage() {if (!onVoyage) {try {System.out.println("SuperMan is not yet on a voyage. Please Wait.");wait();System.out.println("Great he has gone on a voyage, time to call him back!!");} catch (InterruptedException e) {System.out.println(" I am SuperMan, i do not handle these petty exceptions");}}onVoyage = false;notify();}
}


因此,我们定义了超人。 请注意,他定义了两种方法。 一个允许他继续航行,另一个允许他从当前航行回叫。 如您所见,超人不会处理异常,因为……。 他是超人 ,他是
例外 。 您可以看到,在每次调用之前,我们检查指示他是否在航行中的布尔值,并根据所调用的方法来调用Object的wait(),以暂停当前正在调用该方法的线程,直到通知()由当前在对象上运行的线程调用。 请注意,应在同步方法或块内调用wait()和notify(),以使其正常工作。 因为您首先需要获取锁才能停止或通知它。

回到上一期,我们知道正义联盟和Jor-El都需要超人,但出于不同的目的。 让我们看一下下面的代码片段如何使这场战斗展开。

public class Test {public static void main(String[] args) {SuperMan superMan = new SuperMan();JusticeLeague justiceLeague = new JusticeLeague(superMan);justiceLeague.start();JorEl jorEl = new JorEl(superMan);jorEl.start();}}class JusticeLeague extends Thread{private SuperMan superMan = null;public JusticeLeague(SuperMan superMan){this.superMan = superMan;}@Overridepublic void run() {superMan.returnFromVoyage();}
}class JorEl extends Thread{private SuperMan superMan = null;public JorEl(SuperMan superMan){this.superMan = superMan;}@Overridepublic void run() {superMan.goOnVoyage();}}

请注意,在这里,我们有JorEl和JusticeLeagure在两个不同的线程上运行,试图同时访问SuperMan。 正如您从我们的主要方法中看到的那样,JusticeLeague希望给超人打电话以拯救世界。 但是幸运的是他还没有航行,所以要求他返回是违法的。 然后乔勒(JorEl)要求儿子继续航行,以实现自己的真实命运。 只有在这次航行之后,他才能返回以拯救地球。 如果现在运行此命令,则可以看到JusticeLeague线程已暂停,直到超人继续航行并调用notify为止。 只是为了好玩,尝试注释掉notify()方法,您将看到应用程序挂起,因为现在一个线程将无限期等待,直到通知该过程完成为止。

如果不是Java Monitors,SuperMan将会失败,因为他将不得不面对世界末日而没有先行航行并实现自己的命运。 Java再次拯救了世界。 注意:这个故事是虚构的,但Java Monitor是真实的

参考: 《 我的旅程》 IT博客上的JCG合作伙伴 Dinuka Arseculeratne 的Java Monitors约束的超人。

翻译自: https://www.javacodegeeks.com/2013/04/superman-bound-by-java-monitors.html

监视器java

监视器java_Java监视器绑定的超人相关推荐

  1. 第十六章 使用系统监视器 - 系统监视器默认值

    文章目录 第十六章 使用系统监视器 - 系统监视器默认值 系统监视器默认值 默认系统监视器组件 默认系统监视器命名空间 默认系统监视器设置 第十六章 使用系统监视器 - 系统监视器默认值 系统监视器默 ...

  2. 第十三章 使用系统监视器 - 系统监视器

    文章目录 第十三章 使用系统监视器 - 系统监视器 系统监视器 系统监控进程 第十三章 使用系统监视器 - 系统监视器 System Monitor 是一种灵活的.用户可扩展的实用程序,用于监控 数据 ...

  3. Java监视器绑定的超人

    这是超人生活中的黑暗时期. 乔尔·艾尔(Jor-El)希望他继续航行,为他的最终命运做好准备. 然而,地球面临着世界末日,正义联盟需要他们的钢铁侠行动来拯救世界. 但是由于我们只有一个超人,您不能同时 ...

  4. Java中内部做监视器_监视器模式 java

    广告 精选中小企业最主流配置,适用于web应用场景.小程序及简单移动App,所有机型免费分配公网IP和50G高性能云硬盘(系统盘). mutex实际上就是对象本身 } 复制代码什么是监视器模式 jav ...

  5. Java的对象监视器和Condition监视器概念以及对比

    详细介绍了Java对象监视器的概念以及API方法,包括JDK1.5提供的Condition监视器对比. 文章目录 1 对象监视器 1.1 方法 1.2 特点 2 Condition 监视器 2.1 O ...

  6. Swift编程语言学习10—— 枚举属性监视器

    属性监视器 属性监视器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性监视器.甚至新的值和如今的值同样的时候也不例外. 能够为除了延迟存储属性之外的其它存储属性加入属性监视器,也能够通过重载 ...

  7. mac玩rust用什么画质_Mac上的活动监视器到底有什么用?你会用么?

    您希望当Mac卡住或沙滩球不断旋转时,Mac中有一个任务管理器.它允许您强制退出已冻结的网站或应用程序.Windows用户熟悉任务管理器,并且擅长使用它来管理PC任务以优化PC性能.因此,您想知道Ma ...

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

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

  9. 监视器(monitor)

    在了解这两种锁之前,先要知道一个概念,"监视器". 监视器是操作系统实现同步的概念,一个监视器往往一个对象引用相关联,当一个监视器开始监视某一段代码时,其他的线程就需要拥有这个监视 ...

最新文章

  1. android 高德地图纠偏,高德地图纠偏算法(android ,ios)
  2. linux 怎样设置ip、网关、掩码
  3. 2017 全球超大规模数据中心已超过 390 个,中国仅占 8%
  4. JDK 1.4 主要新特性
  5. SAS实现四十年连续增长,2015年全球营收达31.6亿美元
  6. leetcode--1025. 除数博弈
  7. MongoDB数据分布不均的解决方案
  8. 读取XML文件报 - Content is not allowed in prolog
  9. php url路由入门实例,ThinkPHP URL 路由实例
  10. MacOS的14个Spotlight搜索技巧
  11. windows2003事件记录中显示组策略错误,登录域控制器很慢(服务器自身)
  12. Ubuntu 上搭建 TFTP 服务器
  13. draco压缩引擎学习笔记(二)
  14. LeetCode之报数(简单 模拟 递归)
  15. 卓训教育:家长如何管理好孩子的学习?
  16. (java)2的幂次方
  17. OSChina 周五乱弹 ——下完雨朕的江山都湿了
  18. 让源代码成为开发者最宝贵的财富
  19. 弘辽科技:淘宝卖家打造爆款商品的六大技巧!
  20. 香水白皮书指出,中国香水消费客单价远超美欧市场

热门文章

  1. 分布式 | Dubbo 架构设计详解
  2. Oracle入门(十四E)之条件表达式case和deocde函数
  3. Oracle入门(十二A)之数据类型
  4. 《金色梦乡》金句摘抄(四)
  5. Servlet使用适配器模式进行增删改查案例(IBaseDaoUtil.java)
  6. JSP 统计网站访问人数
  7. 谁说表单只能发get和post请求了?
  8. java安装显示更改_java 安装与配置
  9. java如何连接mysql_Java如何连接数据库
  10. python binascii array('c')_详解Python中的array数组模块相关使用