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/
- Java多线程_编程模型研究
- Java研究_多线程
- Java语言多线程程序模型研究
- 黑马程序员:Java编程_多线程
- Java的多线程编程模型4--synchronized
- java 多线程编程之内存模型
- Java的多线程编程模型之AtomicInteger
- Java语言深入:关于多线程程序模型研究
- 多线程编程模型
- 多线程服务器编程模型
- 多线程编程模型
- 多线程编程模型
- Java的多线程编程模型5--Java中的CAS理论
- JAVA多线程编程——JAVA内存模型
- JAVA多线程编程——JAVA内存模型
- JAVA并发编程2_线程安全&内存模型
- java编程思想(第四版)_第14章 多线程
- java速度入五._多线程编程基础
- DOM 基本操作
- sql语句查询表的字段名
- 做个真正的男人
- 如何实现在屏幕中可以输入负数
- GP技术的展望——道生一,一生二
- Java多线程_编程模型研究
- OOP的黄昏
- 路考步骤、注意点
- VC++ 6 的 MSDN 插件
- PHP 中的一些经验积累
- .NET学习笔记(六) ------事件
- Windows platform sdk 头文件的使用
- ASP连接11种数据库语法总结
- C编程题(13)