background image

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。学习模式是为了具备更好的分析问题的能力。
  而似乎这些来自西方的技术,并且是目前的,我们有没有呢?其实我个人有个大胆的
推测,我认为我们祖先的《孙子兵法》就是很好设计模式,因为它符合设计模式需要的基
本特征,就是在特定的条件下,用某种特定的方式合理且高效的解决问题。只不过一是用
在军事上,二是完备性方面我们还没研究。但我认为我们至少没有很好的扩展和进行类比
式的应用,否则今天可能是我们中国人教外国人什么是设计模式。
  类比的方法实际上是发明或发现的常用方法。不知能否让你感觉到其实外国的技术并
不是那么的神秘,也许我们从自身的文化当中挖掘出的东西太少了。