[转贴]关于多线程模式(http://www.hxitz.com/Edu/List/a3c9f87b373a70312.html)
2006-09-28 15:48
423 查看
最近开始接触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。学习模式是为了具备更好的分析问题的能力。
而似乎这些来自西方的技术,并且是目前的,我们有没有呢?其实我个人有个大胆的推测,我认为我们祖先的《孙子兵法》就是很好设计模式,因为它符合设计模式需要的基本特征,就是在特定的条件下,用某种特定的方式合理且高效的解决问题。只不过一是用在军事上,二是完备性方面我们还没研究。但我认为我们至少没有很好的扩展和进行类比式的应用,否则今天可能是我们中国人教外国人什么是设计模式。
类比的方法实际上是发明或发现的常用方法。不知能否让你感觉到其实外国的技术并不是那么的神秘,也许我们从自身的文化当中挖掘出的东西太少了。
文中让我比较受益的一句话是:“我们编程只要尽量站到比较高的层次,很多道理其实你会发现你已经懂了。”当然,我们不能把这句话当成万能药,但是当你纠缠于某些概念时,很容易造成自己思维的短路,这时候,换个角度,未必是坏事:)
[正文]
我这里可以大概给你介绍一下,但对于每一种编程模型要看具体的示例是什么,而且我不可能给你罗列所有的代码,请谅解。
其实我们编程只要尽量站到比较高的层次,很多道理其实你会发现你已经懂了。
就多线程来说,我们开始设想只有两个线程(>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。学习模式是为了具备更好的分析问题的能力。
而似乎这些来自西方的技术,并且是目前的,我们有没有呢?其实我个人有个大胆的推测,我认为我们祖先的《孙子兵法》就是很好设计模式,因为它符合设计模式需要的基本特征,就是在特定的条件下,用某种特定的方式合理且高效的解决问题。只不过一是用在军事上,二是完备性方面我们还没研究。但我认为我们至少没有很好的扩展和进行类比式的应用,否则今天可能是我们中国人教外国人什么是设计模式。
类比的方法实际上是发明或发现的常用方法。不知能否让你感觉到其实外国的技术并不是那么的神秘,也许我们从自身的文化当中挖掘出的东西太少了。
相关文章推荐
- .NET多线程编程(1):多任务和多线程(http://www.pconline.com.cn/pcedu/empolder/net/cs/0506/653286_1.html)
- LaunchMode页面加载模式 http://www.eoeandroid.com/thread-544077-1-1.html
- DataGrid资料(转贴 http://www.cnblogs.com/icesnaker/archive/2004/07/31/29017.html)
- 关于<验证码>的实现和执行流程 http://www.cnblogs.com/android-html5/archive/2012/05/19/2533650.html
- [转-来自啊泰]简单介绍一下水晶报表的推与拉两种模式 [http://www.cnblogs.com/babyt/archive/2005/04/12/135849.html]
- Android学习CursorWrapper与Decorator模式 (转至http://www.cnblogs.com/bastard/archive/2012/05/31/2527944.html)
- 设计模式 http://www.runoob.com/design-pattern/flyweight-pattern.html
- c#委托,事件及观察者模式(转自:http://www.cnblogs.com/JimmyZhang/archive/2011/12/25/903360.html)
- 数组定义 转载 原地址:http://www.tzwhx.com/newOperate/html/1/12/121/21969.html
- [转-来自啊泰]推模式下dataset1下显示的是"...未找到项目..." 问题的解决[补充] [http://www.cnblogs.com/babyt/archive/2005/04/15/138588.html]
- Windows Phone 7 MVVM模式数据绑定和传递参数 from:http://www.cnblogs.com/linzheng/archive/2011/03/27/1997086.html
- C# 实现的多线程异步Socket数据包接收器框架(来源http://www.cnblogs.com/wcfgroup/archive/2008/10/06/1304512.html)
- MVC MVP MVVM 模式图、实例、优缺点【摘录】http://www.cnblogs.com/2018/archive/2011/05/20/2045893.html
- [转-来自啊泰]推模式下dataset1下显示的是"...未找到项目..." 问题的解决 [http://www.cnblogs.com/babyt/archive/2005/04/15/138582.html]
- 收集关于scrollTop信息 http://www.cnblogs.com/FrameWork/archive/2007/04/13/712750.html
- 小笨狼漫谈多线程:GCD(一) http://www.cocoachina.com/ios/20160225/15422.html
- 关于Application.Lock和Lock(obj) 转 http://www.cnblogs.com/yeagen/archive/2012/03/01/2375610.html
- Android中Activity启动模式详解(原文:http://www.cnblogs.com/fanchangfa/archive/2012/08/25/2657012.html)
- C#高级编程:信道-from(http://www.tzwhx.com/newOperate/html/1/12/124/10365.html)
- C# 关键字区别ref 和 out(文章来源:http://www.tzwhx.com/newOperate/html/1/12/123/19058.html)