[转贴]关于多线程模式(http://www.hxitz.com/Edu/List/a3c9f87b373a70312.html)
来源:互联网 发布:共享网络和独享网络 编辑:程序博客网 时间:2024/05/18 10:55
最近开始接触java线程方面的知识,线程、多线程----一直以来都不是太了解,可能这就是为什么感觉它很神秘、高升莫测的原因吧。慢慢开始阅读这方面的教程(但在实际工作中从未碰到过),越往深处越难以理解……知道看到这篇文章,才有点豁然开朗的感觉-----这些概念原来并不是那么难理解,当然,所有的理论要最终亲自运用到实际中才能达到对自己的知识的升华,还要继续努力……文中让我比较受益的一句话是:“我们编程只要尽量站到比较高的层次,很多道理其实你会发现你已经懂了。”当然,我们不能把这句话当成万能药,但是当你纠缠于某些概念时,很容易造成自己思维的短路,这时候,换个角度,未必是坏事:)
[正文]
我这里可以大概给你介绍一下,但对于每一种编程模型要看具体的示例是什么,而且我不可能给你罗列所有的代码,请谅解。
其实我们编程只要尽量站到比较高的层次,很多道理其实你会发现你已经懂了。
就多线程来说,我们开始设想只有两个线程(>2时是不是算数学归纳法?)那么如果两个独立的线程会发生什么呢?
1。当一个线程进入moniter(也就是说站用一个object),另一个线程只有等待或返回,而我们把返回就称为一种模式,这种模式的英文是Balking。
2。这两个线程可以是有序的执行,而不是让OS来调度,这时我们要用一个object来调度,这种模式称为Scheduler。(这个词及其含义其实OS中就有)。
3。如果这两个线程同时读一个资源,我们可以让他们执行,但如果同时写的话,你闭着眼睛都会知道可能出现问题,这时我们就要用另一种模式(Read/Write Lock)。
4。如果一个线程是为另一个线程服务的话,比如IE中负责数据传输的线程和界面显示的线程,当一个图片没有传完时,另一个线程就无法显示,至少是部分没有传完。那么这时我们要用一个模式称为生产者和消费者,英文是Producer-Consumer。
5。两个线程的消亡也可以不是完全又OS来控制的,这时我们需要给出一个条件,使得每个线程在符合条件是才消亡,也就是有序的消亡,我们称为Two-Phase Termination。
那么有这5个线程模型,基本上可以用到大多数编程任务中。我需要指出的三点是:
1。从高层次上我们可以再验证是否含盖了所有的情况。
2。其实模式不是完全固定的或者说象定律一样,而模式可以为不同的情况进行适当 的调整和组合,目的是为了简洁和高效。
3。学习模式是为了具备更好的分析问题的能力。
而似乎这些来自西方的技术,并且是目前的,我们有没有呢?其实我个人有个大胆的推测,我认为我们祖先的《孙子兵法》就是很好设计模式,因为它符合设计模式需要的基本特征,就是在特定的条件下,用某种特定的方式合理且高效的解决问题。只不过一是用在军事上,二是完备性方面我们还没研究。但我认为我们至少没有很好的扩展和进行类比式的应用,否则今天可能是我们中国人教外国人什么是设计模式。
类比的方法实际上是发明或发现的常用方法。不知能否让你感觉到其实外国的技术并不是那么的神秘,也许我们从自身的文化当中挖掘出的东西太少了。
- [转贴]关于多线程模式(http://www.hxitz.com/Edu/List/a3c9f87b373a70312.html)
- 收藏几段SQL Server语句和存储过程(http://www.pcdog.com/edu/sqlserver/2006/10/d127732.html)
- http://www.flyuphigh.com/list/list-c.html
- Web架构设计 http://www.pcdog.com/edu/web-special/17/01/j331014.html
- 一个好的UNIX学习网站: http://www.pcdog.com/edu/unix/index6.html
- http://www.3lian.com/edu/2014/01-25/126892.html
- jsp给图片添加水印 原文: http://www.3lian.com/edu/2012/10-11/38651.html
- http://www.cs.rit.edu/~ncs/color/t_convert.html
- http://www.cs.cmu.edu/puzzle/puzzle1.html
- http://www.cs.cmu.edu/puzzle/puzzle2.html
- http://www.vcipl.okstate.edu/publications.html(资源转载)
- http://www.cs.xu.edu/~otero/math330/kuratowski.html
- http://www.tup.tsinghua.edu.cn/booksCenter/book_05837401.html#
- 实现多线程的两种方法(转自:http://www.2cto.com/kf/201507/423032.html)
- selenium IDE(http://www.verydemo.com/demo_c128_i46046.html)
- JTable用法(转自http://edu.gamfe.com/tutor/d/8115.html)
- 阀门发展史——http://www.famens.com/news/list-8-13.html
- oracle sql语句优化(转贴:http://www.zahui.com/html/8/41477.htm)
- FileSystemToDB
- unix中的 ourhdr.h 头文件
- 最好的FCKeditor编辑器,使用方法(多国语言的)
- DDX/DDV工作内幕
- c语言的重要概念
- [转贴]关于多线程模式(http://www.hxitz.com/Edu/List/a3c9f87b373a70312.html)
- ASP.NET 2.0个性化配置(profile)
- 浅析Microsoft .net PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息)
- Mono 跨平台编程应该注意的事项
- 测试驱动介绍
- 没有规矩,没有方圆
- fork进程的一些处理,
- Spring Framework MVC1
- JDBC连接失败大总结