Shimeji开源桌宠代码学习(3)
来源:互联网 发布:淘宝图片实拍保护网址 编辑:程序博客网 时间:2024/05/21 07:31
之前的文章里,我们讨论了在Main::run()中调用的Main::loadConfiguration()方法,
这里将Manager设为一个守护进程,然后我们再看Manager::start()方法,
主要设置了线程的休眠时间和Manager实例去调用tick()方法刷新的规则,也就是说,通过将Manager设置为守护线程,在项目结束前才会结束,同时管理每一个shimeji的线程,这种设计思路对于整个进程的管理有很大的启发。
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都结束后才会结束,这个时候使用守护线程就非常合理了。
1 0
- Shimeji开源桌宠代码学习(3)
- Shimeji开源桌宠代码学习(1)
- Shimeji开源桌宠代码学习(2)
- 基础学习笔记 + 代码实例 (3)
- C#代码优化学习总结(3)
- srs代码学习(3)-链接管理
- 第一行代码学习2(3)
- 第一行代码学习3(8)
- 第一行代码学习3(9)
- 第一行代码学习3(10)
- 第一行代码学习3(11)
- 第一行代码学习3(12)
- 代码大全学习-3
- love2d 学习 - 代码3
- Java学习【代码3】
- ccjoystick 代码 (学习 )
- socket 学习(代码)
- VINS 代码学习(一)--feature_tracker 代码
- poj1741 点分治
- Adjacency List Dijkstra
- RecyclerView的基本使用
- 【Basic Code】浅谈线程锁及Queue队列
- Java设计模式----组合模式(composite)
- Shimeji开源桌宠代码学习(3)
- 新浪短链接API接口示例
- 【机房合作】策略+职责链在下机中的应用
- SSL P1364 医院设置
- python快速入门
- PAT B1003
- Android APP启动时出现白屏或者黑屏怎么办?
- C++删除空指针的一个坑
- 理解闭包(二)