Java多线程_编程模型研究

来源:互联网 发布:淘宝买家评论怎么看 编辑:程序博客网 时间:2024/04/30 01:34

题目:Java多线程_编程模型研究
作者:kagula
日期:2007-12-27

目的:探索一种简单的工作方式,实现多线程方式的编码。

阅读对象:了解Java普通多线程概念的读者。

适用对象:Java入门者,哈哈,因为,本人也是因为工作需要,初初看下Java,哈哈!

环境:
     [1]JDK1.6.x
     [2]MyEclipse5.1.x
     [3]多核或多处理器计算机

关键词:
     多线程,普通线程,主线程

正文:
     [a]目标:高负荷运算工作让独立线程(普通线程)实现。主线程能够查询,独立线程工作情况。
        这里探讨的是非RT多线程系统。这里,不考虑算法的空间效率。

     [a-1]我把需要消耗大量cpu时间的代码(这里,是方法体t_main),作为名为MyThread类的一个方法。
          MsgManagement类,对MyThread进行封装,它继承自ThreadGroup类,所以有线程组(ThreadGroup)的所有属性。
    主线程在需要调用方法体t_main,完成运算功能时,用如下代码片段对MsgManagement实例进行操作,
        ...
   Object lockMain=new Object(); //用来锁住主线程,可以用来等待branch thread返回运算结果。
   MsgManagement mm=new MsgManagement("MsgProc1",lockMain);  //MsgManagement的实例化
    ...
  try {
  ThreadListener tl=new ThreadListener();  //用来打印,t_main运行状态!
  String pThreadName =mm.invoke("t_main",  //含大量运算的,方法体名称。用来寻找,需要成为独立线程的方法。
            new Class[]  {Integer.class,Long.class,ThreadListener.class},  //方法体的入口参数,类型列表
            new Object[] {new Integer(3),new Long(4),tl});  //方法体的入口参数,值列表
 ...
        而MsgManagement实例,会建立MyThread实例线程,并启动之。

       下面是MyThread实例,t_main方法体
 public String t_main(
                 Integer pInteger,Long pLong,ThreadListener objListener)  //方法体的入口参数,入口对象列表(有些教材,把它叫做形参表)
 {
  int nCount=100*1000*1000; //假设,运算量
  
                //执行运算操作
  ...部份代码,略...
                objListener.setState(...);//用来,打印运算状态
  ...部份代码,略...

                //返回运算结果
                Long lR=pInteger*pLong;
  return lR.toString();
 }

        主线程在完成了它的本职工作后,可以调用MsgManagement实例,下面的代码,取pThreadName线程的运算结果。
                         ...部份代码,略...
    log.debug("等待线程执行完毕....  ");
    while(mm.activeCount()>0)  {
     mm.setMaxPriority(Thread.MAX_PRIORITY);
     synchronized(lockMain)
     {
      lockMain.wait();
     }
    }
    //取线程运算结果
    log.debug(pThreadName+"="+mm.getResult(pThreadName).toString()); 
                         ...部份代码,略...

    我们也可以通过ThreadListener类的实例,向t_main传递控制信息,使封装t_main方法的线程及早结束。
        我们也可以通过ThreadListener类的实例,取t_main的运行状态。

    [a-2]这种把需要独立线程来执行的操作封装成MyThread的一个方法来运行的模式,可能更适应,启动服务组,比如WebService服务器线程。
        在对Java的探索中,遗憾的是Java不支持指针,使一些能在C语言中使用的编程技巧,在Java中很难或不能直接实现。并且Java还限制了编程模式,进
    一步限制了软件设计模式,众所周知,设计模式无所谓好坏,评判它的唯一标准,只是在具体项目中,这种方式是不是能最快保质完成目标。
        但是,实践无疑已经证明,JAVA的易用性优点已经盖过了它在灵活性方面的缺陷。

注意:
     [1]只有在普通线程,工作结束后,主线程(程序)才会结束。

术语表:
   [1]RT(RealTime)    中文含义:实时、及时

相关资料:
[1]《Java 理论与实践: 嗨,我的线程到哪里去了?》
http://www.ibm.com/developerworks/cn/java/j-jtp0924/index.html
[2]《编写多线程的 Java 应用程序》
http://www.ibm.com/developerworks/cn/java/j-thread/index.html
[3]《JAVA高级:多核线程-volatile原理与技巧》
http://www.cn-java.com/www1/?action-viewnews-itemid-4347
[4]《修复 Java 内存模型》
http://www.ibm.com/developerworks/cn/java/j-jtp02244/
[5]《实时 Java 系列》
http://www.ibm.com/developerworks/cn/java/j-rtj/