文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发Java如果我是国王:关于解决 Java 编程语言线程问题的建议
精品推荐
特别推荐
·实例讲解:Java中的SOAP技术
·Java语言出现的背景 影响及前景
·Java精华积累:初学者都应该搞懂的问题
·Java多媒体框架设计自动播放机实例详解
·如何有效防止Java程序源码被人偷窥?
·Cell插件在J2EE系统中的应用
·初学者想学Hibernate,初级基础教程
·Java语言实现支持视频点播的WEB服务器
·关于Java编程的中文问题的几条分析原则
·确保J2ME无线移动商业应用程序的安全性
·Java开源技术:Eclipse的使用技巧详解
·新手入门:Java中的修饰词使用方法总结
·JAVA开发者应该去的20个英文网站
·使用JDBC创建数据库访问程序
·JDK的命令详解
·Java学习从入门到精通(附FAQ)
·Tomcat性能调整
·JSF:Java中面向Web开发的生旦净末丑
·对Java语言入门初学者的一些建议
·Java技术的新方向
热点TOP10
·Java图形用户界面设计
·在桌面应用中使用JAVA DB
·3D编程指南第一部分:快速进入移动JAVA 3D编程世界
·java swing的拖放例子
·用Java编写的记事本程序(1)
·用Java编写的记事本程序(3)
·JasperReport经验谈
·图解JBuilderX安装与实践
·用java编写的小游戏源代码分析
·struts+spring+ibatis轻量级J2EE开发
·单源点最短路径Dijkstra算法的JAVA实现
·实例讲解:Java中的SOAP技术
·初学者想学Hibernate,初级基础教程
·中国农历二百年算法及年历程序分析一
·用Java实现SMTP服务器
·Java语言出现的背景 影响及前景
·Java Applet 入门第三天
·用Java编写的记事本程序(2)
·Java学习从入门到精通(附FAQ)
·通过JCA实现企业级应用程序的“即插即用”

如果我是国王:关于解决 Java 编程语言线程问题的建议

日期:2007年5月2日 作者: 查看:[大字体 中字体 小字体]



  Allen Holub

自由撰稿人
内容:
task(任务) 的概念
synchronized 关键字
wait 和 notify 方法
修定 thread 类
线程间的协作
读写锁
部分创建的对象
volatile 关键字
访问的问题
后台程序的突然结束
重新引入 stop、suspend 和 resume
被阻断的 I/O
threadGroup 类
总结
参考资料
作者简介

Allen Holub 指出,Java 编程语言的线程模型可能是此语言中最薄弱的部分。它完全不适合实际复杂程序的要求,而且也完全不是面向对象的。本文建议对 Java 语言进行重大修改和补充,以解决这些问题。

Java 语言的线程模型是此语言的一个最难另人满意的部分。尽管 Java 语言本身就支持线程编程是件好事,但是它对线程的语法和类包的支持太少,只能适用于极小型的应用环境。

关于 Java 线程编程的大多数书籍都长篇累牍地指出了 Java 线程模型的缺陷,并提供了解决这些问题的急救包(Band-Aid/邦迪创可贴)类库。我称这些类为急救包,是因为它们所能解决的问题本应是由
Java 语言本身语法所包含的。从长远来看,以语法而不是类库方法,将能产生更高效的代码。这是因为编译器和
Java 虚拟器 (JVM) 能一同优化程序代码,而这些优化对于类库中的代码是很难或无法实现的。

在我的《Taming Java Threads》(请参阅参考资料)书中以及本文中,我进一步建议对
Java 编程语言本身进行一些修改,以使得它能够真正解决这些线程编程的问题。本文和我这本书的主要区别是,我在撰写本文时进行了更多的思考,
所以对书中的提议加以了提高。这些建议只是尝试性的 --
只是我个人对这些问题的想法,而且实现这些想法需要进行大量的工作以及同行们的评价。但这是毕竟是一个开端,我有意为解决这些问题成立一个专门的工作组,如果您感兴趣,请发 e-mail 到 threading@holub.com。一旦我真正着手进行,我就会给您发通知。

这里提出的建议是非常大胆的。有些人建议对 Java
语言规范 (JLS)(请参阅参考资料)进行细微和少量的修改以解决当前模糊的
JVM 行为,但是我却想对其进行更为彻底的改进。

在实际草稿中,我的许多建议包括为此语言引入新的关键字。虽然通常要求不要突破一个语言的现有代码是正确的,但是如果该语言的并不是要保持不变以至于过时的话,它就必须能引入新的关键字。为了使引入的关键字与现有的标识符不产生冲突,经过细心考虑,我将使用一个
($) 字符,而这个字符在现有的标识符中是非法的。(例如,使用
$task, 而不是 task)。此时需要编译器的命令行开关提供支持,能使用这些关键字的变体,而不是忽略这个美元符号。

task(任务)的概念

Java
线程模型的根本问题是它完全不是面向对象的。面向对象 (OO) 设计人员根本不按线程角度考虑问题;他们考虑的是同步信息异步信息(同步信息被立即处理
--
直到信息处理完成才返回消息句柄;异步信息收到后将在后台处理一段时间
-- 而早在信息处理结束前就返回消息句柄)。Java 编程语言中的
Toolkit.getImage() 方法就是异步信息的一个好例子。getImage()
的消息句柄将被立即返回,而不必等到整个图像被后台线程取回。

这是面向对象 (OO) 的处理方法。但是,如前所述,Java
的线程模型是非面向对象的。一个 Java 编程语言线程实际上只是一个
run() 过程,它调用了其它的过程。在这里就根本没有对象、异步或同步信息以及其它概念。

对于此问题,在我的书中深入讨论过的一个解决方法是,使用一个
Active_object。 active
对象是可以接收异步请求的对象,它在接收到请求后的一段时间内以后台方式得以处理。在
Java 编程语言中,一个请求可被封装在一个对象中。例如,你可以把一个通过
Runnable接口实现的实例传送给此 active 对象,该接口的 run()
方法封装了需要完成的工作。该 runnable 对象被此 active 对象排入到队列中,当轮到它执行时,active 对象使用一个后台线程来执行它。

在一个 active 对象上运行的异步信息实际上是同步的,因为它们被一个单一的服务线程按顺序从队列中取出并执行。因此,使用一个
active 对象以一种更为过程化的模型可以消除大多数的同步问题。

在某种意义上,Java 编程语言的整个 Swing/AWT 子系统是一个 active
对象。向一个 Swing 队列传送一条讯息的唯一安全的途径是,调用一个类似
SwingUtilities.invokeLater() 的方法,这样就在 Swing 事件队列上发送了一个 runnable 对象,当轮到它执行时,
Swing 事件处理线程将会处理它。

那么我的第一个建议是,向 Java 编程语言中加入一个 task(任务)的概念,从而将active 对象集成到语言中。
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] 下一页 




上一篇:深入浅出Java多线程程序设计.doc

下一篇:Effective Java -->(一)创建和销毁对象

如果我是国王:关于解决 Java 编程语言线程问题的建议 相关文章:
·XP系统运行慢?小编自用7招解决
·不用重装XP系统就可以解决全部故障
·关于三级片和A片的区分标准
·全面解决Generic host process for win32 services遇到问题需要关闭
·Vista轻松上手 50条建议和技巧
·开机提示reboot and select proper boot device or insert boot Media in selected boot device的解决
·socket编程原理
·笔记本电脑无线上网解决方案大比拼
·中小企业整体网络安全解决方案解析
·网络拓扑图--解决方案
如果我是国王:关于解决 Java 编程语言线程问题的建议 相关软件:
·C语言程序设计
·C语言库函数速查
·Windows环境下32位汇编语言程序设计
·中东问题的历史根源
·C语言程序设计视频教程 CSF 教材:谭浩强《c程序设计》
·系列语言网页设计
·经典 C++语言教程
·Thinking In Java 英文版
·C++编程思想
·汇编语言共34讲csf东南大学朱敏

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot