一个同步打印机的实现

news/2024/11/18 4:19:11/

文件转自:http://abruzzi.javaeye.com/blog/266317

  • 内部机制

打印机内部设有缓冲区,当有新任务来到的时候,打印机只是简单的从任务中取出需要打印的消息,然后将其存入自身的缓冲区,然后返回,具体的打印任务交给一个线程来处理,打印线程从缓冲区中读消息,打印,然后等待,直到有别的线程唤醒它。其结构如图所示:

 

  

 

  • 单例模式

作为一个系统硬件的模拟,在一个项目中有一个打印机就够用了,在项目中任何需要打印消息的地方,需要使用SyncPrinter.getInstance() 静态方法获取此刻的SyncPrinter实例,并使用print(String message)进行打印。(关于单例模式的细节可以参考别的设计模式的书籍)

  • 同步打印

当然,打印的线程不需要等待打印机缓慢的打印结束,另一种做法是:当打印机收到打印任务后,将此任务放入自己的缓冲区,然后迅速返回,调用打印机的线程可以立即开始接下来的动作,而同时,打印机可以另起一个线程,来打印存储在自己缓冲区中的数据,从而做到同步打印。

缓冲区在本例中实现为一个队列(一个先进先出的数据结构FIFO),队列中的数据总是从尾部插入,从头部被取出。

  • 实现

  • 小结

这个打印机的意义或许不是很大,但是让快速的线程等待一个缓慢的IO过程是不合理的,同时,这是一种分工的思想,而这种互不干涉,各司其职的做法正是面向对象的核心。

借此文来对面向对象的设计原则做一个巩固,同时也可能会帮助其他需要使用同步打印机的人。


http://www.ppmy.cn/news/765430.html

相关文章

如何解决和异地女朋友一起看电影的需求?(内附源码)

一、这是一件悲伤的故事 我是一名程序员,我和我的女友是异地恋,so sad!!! 一次视频时,她突然来了一句:“我们已经很久没有一起看电影了吧。。。。。。” “呃。。。好像是”,毕竟离得…

一分2用计算机怎么打出来,两台电脑怎么共享打印机(打印机一分二的数据线)...

依据上述的提出问题、要想完成两部电脑共享一台复印机得话就需要根据共享网络的方式 来完成,在共享资源以前要先将两部电脑联网换句话说构成一个两部电脑上的局域网络,在构成互联网以后在开展一些设定就可以完成了,那麼实际应当如何实际操作呢…

使用多台打印机同时进行打印操作

使用多台打印机同时进行打印操作 private sub goprint() dim pr as printer for each pr in printers if pr.devicename“printer1” then set printerpr printer.print “hello,world!” printer.enddoc end if if pr.devicename“printer2” then set printerpr printer.pri…

解决无线打印机休眠后掉线无法进行局域网打印的问题

解决无线打印机休眠后掉线无法进行局域网打印的问题 参考文章: (1)解决无线打印机休眠后掉线无法进行局域网打印的问题 (2)https://www.cnblogs.com/yishuad/p/12187723.html (3)https://www…

局域网打印机共享时好时坏问题

问题:局域网打印机pc01上 系统为win8.1 本地安装好用,当打印服务器,pc02 和pc03 共享连接pc01打印进,安转搞好时能打印时而不能打印?自己苦思研究查阅资料,看到一个海纳百川的总结,处理后目前正…

一台计算机可以安装多台打印机吗,一台打印机这样设置可以让多台电脑进行共享打印...

办公室只有一台打印机,但是有好几台电脑,其实几台电脑在同一局域网,是可以同时使用一台打印机的。如果打印机支持网络打印,可以直接连接到交换机或路由器,简单设置一下需要使用打印机的电脑即可共享。 如果打印机不支持…

如何和异地的朋友一起看电影

前几天和小朋友一起在b站上看电影,觉得这个一起看的功能很不错。不过只能在手机端使用,而且有很多影片看不了,所以就想着能不能自己做一个可以同时看电影的功能。 实现思路 学校内网有一个视频网站,包含了大量的资源。并且它请求…

使用WebSocket实现异地同步看电影

使用WebSocket实现异地同步看电影 项目地址:https://github.com/Fangnan700/Film_room 说明 放假回家之后,因为和女朋友不在同一个地方,又想着一起看电影,但市面上能够远程一起看电影的方法都无法满足现有的需求: …