一个同步打印机的实现
来源:互联网 发布:虚拟机下安装ubuntu 编辑:程序博客网 时间:2024/06/06 09:23
文件转自:http://abruzzi.javaeye.com/blog/266317
- 内部机制
打印机内部设有缓冲区,当有新任务来到的时候,打印机只是简单的从任务中取出需要打印的消息,然后将其存入自身的缓冲区,然后返回,具体的打印任务交给一个线程来处理,打印线程从缓冲区中读消息,打印,然后等待,直到有别的线程唤醒它。其结构如图所示:
- 单例模式
作为一个系统硬件的模拟,在一个项目中有一个打印机就够用了,在项目中任何需要打印消息的地方,需要使用SyncPrinter.getInstance() 静态方法获取此刻的SyncPrinter实例,并使用print(String message)进行打印。(关于单例模式的细节可以参考别的设计模式的书籍)
- 同步打印
当然,打印的线程不需要等待打印机缓慢的打印结束,另一种做法是:当打印机收到打印任务后,将此任务放入自己的缓冲区,然后迅速返回,调用打印机的线程可以立即开始接下来的动作,而同时,打印机可以另起一个线程,来打印存储在自己缓冲区中的数据,从而做到同步打印。
缓冲区在本例中实现为一个队列(一个先进先出的数据结构FIFO),队列中的数据总是从尾部插入,从头部被取出。
- 实现
- 小结
这个打印机的意义或许不是很大,但是让快速的线程等待一个缓慢的IO过程是不合理的,同时,这是一种分工的思想,而这种互不干涉,各司其职的做法正是面向对象的核心。
借此文来对面向对象的设计原则做一个巩固,同时也可能会帮助其他需要使用同步打印机的人。
- 一个同步打印机的实现
- 实现一个同步的RenderApplication
- 实现打印机的共享
- 一个控制打印机的单元
- QT调用打印机的实现
- 实现一个文件夹同步的shell脚本
- 实现一个同步的迭代型TCP服务器
- 笔记本和打印机不在一个网段,无线连接打印机的方法
- java打印机的一个问题的解决办法
- 打印机-顾客进程同步
- 自定义一个控制打印机的单元
- 不同网段共享一个打印机的实践
- 实现打印机
- 一种蓝牙打印机的实现方案
- 一个支持多线程同步的堆栈的实现
- 一个支持多线程同步循环队列的实现
- 一个免除同步开销的Singleton模式 实现
- 实现一个同步的并发型TCP服务器
- 使用FileUpload控件上传图片并自动生成缩略图、自动生成带文字水印和图片的水印图
- JS中confirm,alert,prompt函数
- 解禁后第一篇
- javascript常用技巧
- cegui新版dependency库出现 应用程序正常初始化(0xc0150002)失败
- 一个同步打印机的实现
- jQuery TreeView
- Unicode字符编码分布表――语言文字类
- TreeView控件实现选中父节点时全选子节点
- Building Your Own Plugin Framework
- OCP认证考试指南(3):创建Oracle数据库(1)
- TreeView树形菜单
- java多线程:No enclosing instance of type ProducerConsumer is accessible. Must qualify the allocation with an enclosing instance o
- HOOKAPI--初步