之前的文章里,我们讨论了在Main::run()中调用的Main::loadConfiguration()方法,

 public void run() {// 設定を読み込むloadConfiguration();// トレイアイコンを作成するcreateTrayIcon();// しめじを一匹作成するcreateMascot();getManager().start();}

这次我们先来讲getManager.().start(),这里的getManager()方法会返回一个Manger类的实例,首先看Manager的constructor

 public Manager() {// これは Windows 上で動く Java のバグを修正するための処置// 短い長さの Thread.sleep を頻繁に呼ぶと Windows の時計が狂う// 長い Thread.sleep を呼んでいるとこの問題を回避できる.new Thread() {{this.setDaemon(true);this.start();}@Overridepublic void run() {while (true) {try {Thread.sleep(Integer.MAX_VALUE);} catch (final InterruptedException ex) {}}}};}

这里将Manager设为一个守护进程,然后我们再看Manager::start()方法,

 /*** スレッドを開始する.*/public void start() {if ( thread!=null && thread.isAlive() ) {// もうスレッドが動いているreturn;}thread = new Thread() {@Overridepublic void run() {// 前回の時間long prev = System.nanoTime() / 1000000;try {for (;;) {for (;;) {// 現在の時間// TICK_INTERVAL 経つまでループ.final long cur = System.nanoTime() / 1000000;if (cur - prev >= TICK_INTERVAL) {if (cur > prev + TICK_INTERVAL * 2) {prev = cur;} else {prev += TICK_INTERVAL;}break;}Thread.sleep(1, 0);}// マスコットたちを動かす.tick();}} catch (final InterruptedException e) {Thread.currentThread().interrupt();}}};thread.setDaemon(false);thread.start();}

主要设置了线程的休眠时间和Manager实例去调用tick()方法刷新的规则,也就是说,通过将Manager设置为 守护线程,在项目结束前才会结束,同时管理每一个shimeji的线程,这种设计思路对于整个进程的管理有很大的启发。

因为我们希望只要程序在运行,就需要一个manager来处理创建一个新的shimeji,等响应应用监听到的事件的并且当所有shimeji都结束后才会结束,这个时候使用守护线程就非常合理了。

Shimeji开源桌宠代码学习(3)相关推荐

  1. Shimeji开源桌宠代码学习(2)

    在 Shimeji开源桌宠代码学习(1)中描述了整个配置文件加载的过程,其中很多地方使用了Builder这一概念,首先我们先来看看这些Builder都有什么特征,我认为我们从AnimationBuil ...

  2. Shimeji开源桌宠代码学习(1)

    Shimeji在日语中本意为"蘑菇". 我们这里的Shimeji是种可以在电脑桌面上四处走动,玩耍,分裂以及卖萌捣乱的桌面程序. 这种桌面程序具有高度可配置的特点.其运行方式是依靠 ...

  3. 《开源思索集》一如何更有效地学习开源项目的代码?

    本节书摘来异步社区<开源思索集>一书中的第2章,第2.1节,作者: 庄表伟 责编: 杨海玲, 更多章节内容可以访问云栖社区"异步社区"公众号查看. 如何更有效地学习开源 ...

  4. 如何有效地学习开源项目的代码?

    对于计算机专业的同学来说,网络上丰富的开源代码是一笔极为宝贵的财富.通过对开源代码的学习与钻研,大家能从中学到很多书本上.课堂上学习不到的实践知识.如何学习开源代码以及如何学好开源代码成为了大家经常关 ...

  5. android+饭否+开源,fanfou(饭否) android客户端 代码学习一

    fanfou(饭否) android客户端 代码学习1 LoginActivity.class类 Intent intent = getIntent().getParcelableExtra(Inte ...

  6. python写桌宠_【Unity/开源】八重樱桌宠(三):Python自动更新、修复描边

    接下来就到了喜闻乐见的PY环节: defget_html(url):try:headers = { "Host": "github.com","Use ...

  7. 如何从零开始制作智能桌宠?

    作者 | 李秋键 责编 | maozz 出品 | CSDN(ID:CSDNnews) 引言:是否还记得曾经风靡全国的QQ宠物呢,那个又调皮又可爱的QQ企鹅,偶尔还会生病撒娇,需要培养的虚拟宠物,你是否 ...

  8. python桌面宠物_如何从零开始制作智能桌宠?

    作者 | 李秋键 责编 | maozz 引言:是否还记得曾经风靡全国的QQ宠物呢,那个又调皮又可爱的QQ企鹅,偶尔还会生病撒娇,需要培养的虚拟宠物,你是否还记得它的样子呢.它是腾讯公司推出的第一款QQ ...

  9. 清华「计图」、旷视「天元」纷纷重磅开源,国产深度学习框架迎来高光时刻...

    来源:CSDN 本文约3141字,建议阅读7分钟. 本文介绍清华开源的深度学习框架 Jittor(计图) 引起了广泛关注,支撑旷视诸多业务和战绩的深度学习框架 MegEngine(天元) 也将在近日开 ...

最新文章

  1. 【 MATLAB 】DFT性质讨论(一)线性、循环反转、共轭与实序列的对称性
  2. CodeSmith基础(七)
  3. kali64位下载怎么是AMD_AMD平台虚拟机安装macOS Sierra方法
  4. hibernate 联合主键 merge
  5. ajax(检测用户名,添加数据)
  6. 休眠事实:等于和HashCode
  7. 设计模式(三):单例模式
  8. 起泡排序算法_气泡排序算法
  9. spring boot设置http https端口
  10. 如何将通讯录批量转换为vcf格式导入手机,苹果手机如何批量删除通讯录?
  11. Python爬虫 批量下载美桌网高清美女壁纸
  12. c语言中结构体定义中的“冒号”
  13. SQLITE3 使用总结
  14. 最新杭州公交线路调整,文二路文三路段
  15. 2020全球搜索引擎市场份额排行榜
  16. 腾讯产品策划运营类职位笔试题和参考答案
  17. 猿创征文 |【算法入门必刷】数据结构-栈(三)
  18. OpenJudge 7624 山区建小学
  19. mapengpeng1999@163.com 数据库的设计
  20. Telnet操作步骤

热门文章

  1. 软件架构师考试的真实感受
  2. SVN报错fail to run the WC Db work queue associated with,清理失败,乱码的解决方式
  3. 股价横盘一年,抄底百度的最佳时机到了?
  4. 云表平台中设置明细行单元格样式
  5. Python | 马上又双叒叕七夕了,男同胞们都准备好分手了吗
  6. python 通过 matplotlib 绘制矢量图
  7. 〖Linux〗iptables端口转发(11.11.136.80:5552 == 10.10.136.1:8055/11.11.136.1:8055)
  8. 家庭收支管理系统(java)
  9. 拉卡拉支付提供一站式支付解决方案
  10. 美团二面:为什么 Redis 会有哨兵?