[转贴]关于多线程模式(http://www.hxitz.com/Edu/List/a3c9f87b373a70312.html)

最近开始接触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。学习模式是为了具备更好的分析问题的能力。

而似乎这些来自西方的技术,并且是目前的,我们有没有呢?其实我个人有个大胆的推测,我认为我们祖先的《孙子兵法》就是很好设计模式,因为它符合设计模式需要的基本特征,就是在特定的条件下,用某种特定的方式合理且高效的解决问题。只不过一是用在军事上,二是完备性方面我们还没研究。但我认为我们至少没有很好的扩展和进行类比式的应用,否则今天可能是我们中国人教外国人什么是设计模式。

类比的方法实际上是发明或发现的常用方法。不知能否让你感觉到其实外国的技术并不是那么的神秘,也许我们从自身的文化当中挖掘出的东西太少了。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值