设计模式之孪生兄弟
来源:互联网 发布:linux dd命令拷贝分区 编辑:程序博客网 时间:2024/04/29 19:23
当你开启一个进程,你点击时停止这个进程。再点击时开启这个进程
public class App { public static void main(String[] args) throws InterruptedException { BallItem ballItem=new BallItem(); BallThread ballThread=new BallThread(); ballItem.setTwin(ballThread); ballThread.setTwin(ballItem); ballThread.start(); waiting(); ballItem.click(); waiting(); ballItem.click(); waiting(); ballThread.stopMe(); } private static void waiting() throws InterruptedException { Thread.sleep(750); }}
public class BallItem extends GameItem{ private boolean isSuspended; private BallThread twin; public void setTwin(BallThread twin) { this.twin = twin; } public void move(){ System.out.println("move"); } @Override public void doDraw() { System.out.println("doDraw"); } @Override public void click() { isSuspended=!isSuspended; if(isSuspended){ twin.suspendMe(); }else { twin.resumeMe(); } }}
public class BallThread extends Thread { private BallItem twin; private volatile boolean isSuspended; private volatile boolean isRunning=true; public void setTwin(BallItem twin) { this.twin = twin; } public void run(){ while(isRunning){ if(!isSuspended){ twin.draw(); twin.move(); } try { Thread.sleep(250); } catch (InterruptedException e) { e.printStackTrace(); } } } public void suspendMe(){ isSuspended=true; System.out.println("开始停止这个进程"); } public void resumeMe(){ isSuspended=false; System.out.println("开始恢复这个进程"); } public void stopMe(){ this.isRunning=false; this.isSuspended=true; }}
public abstract class GameItem { public void draw(){ System.out.println("draw"); doDraw(); } public abstract void doDraw(); public abstract void click();}
核心思路:
volatile 关键字作用:一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
阅读全文
0 0
- 设计模式之孪生兄弟
- View之孪生兄弟 ----- SurfaceView
- XML三部曲之HTML的孪生兄弟
- View之孪生兄弟——SurfaceView
- 策略模式与状态模式这一对孪生兄弟
- 读书笔记之View之孪生兄弟-SurfaceView
- 日系框架之seasar2(Teeda:S2JSF的孪生兄弟)
- 孪生兄弟(Prototype)
- Soople:Google的"孪生兄弟"
- SuferfaceView --- View的孪生兄弟
- 设计模式---工厂三兄弟
- 设计模式拾荒之装饰器模式( Decorator Pattern ): 代理模式的双胞胎兄弟
- LoveLion老师的java设计模式之工厂三兄弟之工厂方法模式
- Struts html标签的孪生兄弟:htmlx
- X86的孪生兄弟,Y86指令体系结构
- View孪生兄弟——SurfaceView
- 设计模式—工厂三兄弟
- 工厂三兄弟之工厂方法模式(一):日志记录器的设计
- 关于Android源码的那些事
- Elasticsearch是什么?
- vue开发:VUE axios发送跨域请求需要注意的问题
- seekbar去掉thumb(小圆球)
- 线程类中不能使用@Autowired注解
- 设计模式之孪生兄弟
- MongoDB:12-MongoDB 数据库引用(DBRefs vs 手动引用)
- P2P内网服务器的伪代码解释
- linux体系架构
- 一道面试题目引发的思考
- ps -ef | grep tomcat 命令详解
- 【入门篇】Elasticsearch、Kibana权限控制
- itext实现图片等比缩小放大转pdf
- 基于HyperLedger 创建第一个区块链网络