用J2SE1.5来实现多任务的Java应用程序

J2SE 5.0平台包含了一个新的并发工具程序包。这个程序包中的类替并发类(concurrent classe)或并发设计中使用的应用程序建立阻塞(blocking)。该并发工具包含下面一些内容:

高性能的、灵活的线程池

异步执行事务的框架组件

为并发访问优化过的集合类宿主(host)

本文介绍了J2SE 5.0框架组件类和它们的重要特性。本文的下载代码提供了一些简单的、容易使用的示例,它演示了所有的新线程框架组件类。你在阅读文章内容之后运行这些示例可以使自己对这些特性有更好的理解。

Executor(执行器)框架组件

Executor框架组件提供了一个简单的、标准的、可扩充的类,它提供了一些有用的功能,如果没有这些功能,我们要手工实现这些它们,会觉得十分单调和困难。该框架组件使调用、调度和执行的操作标准化了。它通过一组执行策略为控制异步事务提供了支持。

Executor接口执行已提交的可以运行的事务。它提供了一条途径,允许我们把事务提交从事务执行机制中分离出来。程序员通常使用Executor代替显式地(explicitly)建立线程。Executor接口也提供事务的同步和异步执行。

对于同步执行,使用下面的命令:

Class MySynExecutor implements Executor{
public void execute(Runnable r) {
r.run();
}
}

对于异步执行,使用下面的命令:

Class MyASynExecutor implements Executor{
public void execute(Runnable r) {
new Thread(r).start();
}
}

ExecutorService(执行器服务)类

ExecutorService类为管理一个或多个异步事务的终止和跟踪事务执行的过程提供了方法。代码下载中的MyExecutorService.java文件演示了管理事务终止的过程。它初始化了大小为三个的线程池,然后依次添加了线程。当线程的数量达到线程池的大小限制时,它调用关闭(shutdown)方法。在调用shutdown()方法之后,这个线程池不再接受新事务的执行。在等待十秒以后,该线程池调用shutDownNow()。这个方法会尽最大的努力来终止所有运行中的事务。在示例中,应用程序试图终止运行中的线程失败了。

ScheduledExecutorService(调度执行器服务)

ScheduledExecutorService类是我的最喜欢的类。它对于调度那些周期性执行的事务非常方便,而周期性执行的事务对于清除工作(例如清除你的应用程序建立的临时文件等等)尤其有用。下载代码中的MyScheduledExecutorService.java文件通过每五秒钟发出"嘟嘟"一声演示了调度的过程:

final Runnable beeper = new Runnable() {
public void run() { System.out.println("beep"); }
};
final ScheduledFuture beeperHandle =scheduler.scheduleAtFixedRate(beeper, 1, 5, SECONDS);

Future和FutureTask

在Java的早期版本中,查询运行中的线程状态,以及使线程在执行之后返回一个值是非常困难的。由于run(运行)方法返回void,你必须编写大量的代码从线程中返回一个值。使用过这种方法的程序员肯定了解其痛苦的经历。

你可以使用Future接口或者FutureTask类从异步执行的线程中得到一个返回值。Future接口提供了检查计算过程是否完成、检索计算结果或终止计算过程的一些方法。FutureTask类提供了Future接口方法的基本实现(implementation)。只有计算过程完成以后才能检索结果;如果计算过程没有完成,get方法会被阻塞(block)。

下载代码中的MyStringReverser.java文件演示了FutureTask类的使用,并提供了一个容易理解的示例。它以每秒钟一个字符的速度从后向前显示提交的字符串,同时主线程检测事务是否完成了:

while(!future.isDone()){
System.out.println("Task not yet completed.");
try{
Thread.currentThread().sleep(500);
}catch(InterruptedException ie){
System.out.println("Will check after 1/2 sec.");
}
}

在事务完成以后,就使用get方法从Future对象中检索结果:

System.out.println("Here is result..."+future.get());

ThreadPoolExecutor(线程池执行器)

时间: 2024-10-30 09:37:44

用J2SE1.5来实现多任务的Java应用程序的相关文章

用J2SE1.5建立多任务的Java应用程序

J2SE 5.0中的java.util.concurrent程序包提供了一个新的线程框架组件,这个框架组件处理了与建立.执行和管理线程相关的很多低层细节信息.在本文中我们将细致地了解一下它的重要特性. 如果你使用C.C++或Java先前的版本进行多线程编程,就知道在代码中管理线程是多么头疼的事情.在单线程程序中,代码中引起应用程序失败的bug每次都在同一个点出现.但是在多线程程序中,只有某些原因遇到一起的时候才会出现失败.由于预见可能引发应用程序失败的所有条件是非常困难的,所以多线程编程是有挑战

windows 7-运行一个基于Java的程序总是要求管理员权限怎么办?

问题描述 运行一个基于Java的程序总是要求管理员权限怎么办? #我的操作系统是windows 7. 安装了一个叫**Geogebra**的几何作图软件.这个软件是用Java开发的开源软件. 之前使用一直是正常的,最近一段时候,突然发生了一系列的怪事: 比如一直用的Acrobat突然失效了,后来只好重新安装,用amtlib解决. 再就是重装Acrobat之后就偶然发现Geogebra不用管理员权限无法打开了,即使彻底卸载,清除注册表项,重新安装也没用:还尝试了它的portable版本,也是一样.

为您的Java应用程序添加退出事件处理

程序 一个完整的Java应用程序,通常至少要有一个应用程序的结束点.对于一般程序来说,系统开发者根据需要和个人的偏好,会在程序结束位置,通过添加System.exit(0),或System.out(-1),来结束程序,或不加这些指令,让程序自然运行到结束. 如:下列典型代码 package untitled14;/** * This application is to demo how an applcation end */public class Test { public Test() {

从Java应用程序动态生成PDF文件

pdf|程序|动态 如果应用程序需要动态生成 PDF 文档,则需要 iText 库.开放源码的 iText 库使 PDF 文档的创建能够在瞬间完成.本文介绍了 iText 并提供了使用它从 Java ? 技术应用程序生成 PDF 文档的由浅入深的指南.我们创建了一个示例应用程序以更好地理解 iText. 很多应用程序要求动态生成 PDF 文档.这类应用程序包括银行生成用于电子邮件投递的客户报表,到读者购买特定图书章节并以 PDF 格式接收这些文档.例子罗列下去是很多的.在本文中,将使用 iTex

教你如何成为一名Java初级程序员

程序|程序员 目前,JAVA是开发人员的热宠,很多论坛都有不少热爱JAVA的开发人员,也有不少想成为JAVA程序员,但苦于不知道该如何学习,也不清楚该学些什么知识才能成为一个JAVA程序员.本人在这里抛砖引玉,和大家讨论成为一个JAVA初级程序员应该具有的知识,与大家共享. 个人认为想成为一个合格的JAVA初级程序员应该具备如下知识: 一.面向对象的知识:JAVA是一个面向对象的开发语言,因此熟悉面向对象对学习JAVA很有必要,您要了解:什么是对象,什么是类;什么是封装,什么是多态,什么是继承;

使用Java小程序为网页上的照片添加效果

程序|网页 1.准备源文件 选择要放置到网页上的照片,用扫描仪扫描得到照片的图像文件,再用PhotoShop等图像处理软件处理成大小为300×300象素的图像,最后保存为或者使用ACESee等图像查看软件转换为.jpg格式,保存到新建的文件夹photo中(注意千万别使用汉字为这个文件夹命名).现在假设这些照片图像分别为photo1.jpg.photo2.jpg.photo3.jpg.其中photo1.jpg为主要照片,photo2.jpg和photo3.jpg为辅助照片,最好选择不同时期的照片以

将 Java 小程序迁移到 Microsoft J# 浏览器控件

程序|控件|浏览器 Visual J# .NET 小组 Microsoft Corporation 摘要:通过 Microsoft J# 浏览器控件,开发人员可以将所编写的在 Java 虚拟机上运行的 Java 小程序迁移到 .NET 框架.本文向开发人员介绍 J# 浏览器控件,并说明将 Java 小程序迁移到 .NET 框架的步骤.本文还讨论了其他一些主题,如 J# 浏览器控件的安全性和调试,以及当前版本中不受支持的功能. 下载 HTML 小程序到对象标记转换器 (95KB) 本文假设开发人员

如何在 Java 应用程序中读取 8 位和 24 位 Microsoft Windows 位图(转)

window|程序 如何在 Java 应用程序中读取 8 位和 24 位 Microsoft Windows 位图在 Java 应用程序中加载位图文件的逐步指南 作者:Jeff West 和 John D. Mitchell 摘要目前,标准的 getImage() 方法仅支持 GIF 和 JPEG 图像.尽管存在用于读取 PNG(可移植网络图形)格式的 Java 例程,但我们还没听说过有用于读取 Microsoft Windows 位图图像的阅读程序.Jeff West 撰写的这篇技巧提供了加载

在JAVA应用程序中如何实现FTP的功能 (转)

程序 在JAVA应用程序中如何实现FTP的功能 大连捷通电脑技术有限公司 王 淼 ---- 在JAVA的编程中,您也许会遇到FTP方面的编程,本文就来演示如何实现它. ---- 本程序是由JBUILDER2.0来开发的,为了节约篇幅我只列出主要的三个部份.FtpList 部分是用来显示FTP服务器上的文件(附图略).GetButton部分为从FTP服务器下传一个文件.PutButton 部分为向FTP服务器上传一个文件.别忘了在程序中还要引入两个库文件(import sun.net.*,impo