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

J2SE 5.0中的java.util.concurrent程序包提供了一个新的线程框架组件,这个框架组件处理了与建立、执行和管理线程相关的很多低层细节信息。在本文中我们将细致地了解一下它的重要特性。

如果你使用C、C++或Java先前的版本进行多线程编程,就知道在代码中管理线程是多么头疼的事情。在单线程程序中,代码中引起应用程序失败的bug每次都在同一个点出现。但是在多线程程序中,只有某些原因遇到一起的时候才会出现失败。由于预见可能引发应用程序失败的所有条件是非常困难的,所以多线程编程是有挑战性的。有些程序员从根本上避免这种挑战,而另外一些--聪明的解决问题的人员--则一直坐在他们的计算机面前直到问题解决。

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()。这个方法会尽最大的努力来终止所有运行中的事务。在示例中,应用程序试图终止运行中的线程失败了。

时间: 2024-12-04 01:57:01

用J2SE1.5建立多任务的Java应用程序的相关文章

用RMI建立一个分布式Java应用程序详解

RMI,远程方法调用(Remote Method Invocation)是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径.RMI是非常容易使用的,但是它非常的强大. RMI的基础是接口,RMI构架基于一个重要的原理:定义接口和定义接口的具体实现是分开的.下面我们通过具体的例子,建立一个简单的远程计算服务和使用它的客户程序 一个正常工作的RMI系统由下面几个部分组成: ● 远程服务的接口定义 ● 远程服务接口的具体实现 ● 桩(Stub)和框架(Skelet

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

J2SE 5.0平台包含了一个新的并发工具程序包.这个程序包中的类替并发类(concurrent classe)或并发设计中使用的应用程序建立阻塞(blocking).该并发工具包含下面一些内容: 高性能的.灵活的线程池 异步执行事务的框架组件 为并发访问优化过的集合类宿主(host) 本文介绍了J2SE 5.0框架组件类和它们的重要特性.本文的下载代码提供了一些简单的.容易使用的示例,它演示了所有的新线程框架组件类.你在阅读文章内容之后运行这些示例可以使自己对这些特性有更好的理解. Execu

hashmap-HashMap建立索引的Java问题

问题描述 HashMap建立索引的Java问题 有几句话类似于s1=....;s2=......;s3=.....;能够实现输出其中的单词并显示在哪句话中,利用hashmap的技术 解决方案 HashMap<String, String> hm = new HashMap<string, string>(); String[] data = s.split(";"); for (String item : data) { hm.put(item.split(&q

用java小程序applet实现无限级树结构

程序 该程序可以根据从指定的xml文件中读取的有关信息动态的建立一棵树. 1.该树的特点: 1)无限级树结构 理论上树的深度可以无限,树的深度由xml文件所给的信息确定: 数据加载采用一次加载和动态加载相结合的方法: 每次打开相关页时重新加载树结构,真正的做到了建立树的动态性. 2)复用性 由于这棵树是通过读取xml文件建立的,树的程序代码固定,所以具有很强的复用性.只需要给出xml文件,程序就可以建立对应的树. 3)与用户的交互 由于该程序是用java小程序实现的,所以可以利用java语言中监

构建服务器集群感知的Java应用程序

如今,许多企业应用程序都由一组合作的分布式进程和服务器交付.例如,可向几乎所有流行的 Java 企业服务器的 Web 请求提供服务器集群功能,这些服务器还可以提供有限的配置选项,如服务器权重和配置重新加载. 虽然大多 数 Java 企业服务器具有集群的内置支持,但对于自定义用例来说,在应用程序级并没有现成提供这种支持.作为软件开发 人员,我们应该如何管理涉及分布式任务协调或支持多租户应用程序的用例?(多租户应用程序 是要求实例在整体服务器 集群或组的子集上被隔离的应用程序.)对于这些类型的用例,

在NetBeans IDE 6.0中开发通用Java应用程序简介

本简明教程将演示如何在 NetBeans IDE 6.0 中开发 Java SE 应用程序.本教程假定您对 Java 应用程序的开发已比较熟悉.在讲解过程中,我们将演示如何通过一些 IDE 特性简化应用程序开发. 我们将开发一个单词转换应用程序,用于将多个英文单词转换为一个英文单词.生成单词的构成形式为第一个词的第一个字母.第二个词的第二个字母.第三个词的第三个字母,依此类推.该生成词称为 离合词. 建立项目 我们创建的应用程序将包含两个项目: 具有实用程序类的 java 库项目. 具有 mai

Java应用程序开箱即用的对象持久性

Simple Persistence for Java是一个开源的对象关系型持久性库,它使用定制查询语言以及内建数据库支持来简化 Java 应用程序中的对象持久性.在本文中,软件架构师 Sami Salkosuo 介绍了该库,并带您领略解决对象持久性的零管理以及零配置方法. 对象持久性几乎是所有 Java 应用程序(从桌面应用程序到企业级应用程序)中的必备.持久性的缺点是它一直都不太简单.但这一情况已在最近一版的 Simple Persistence for Java(一个开源的对象关系型持久性

在 Java 应用程序中计划重复执行的任务

所有类型的 Java 应用程序一般都需要计划重复执行的任务.企业应用程序需要计划每日 的日志或者晚间批处理过程.一个 J2SE 或者 J2ME 日历应用程序需要根据用户的约定计划 闹铃时间.不过,标准的调度类 Timer 和 TimerTask 没有足够的灵活性,无法支持通常需 要的计划任务类型.在本文中,Java 开发人员 Tom White 向您展示了如何构建一个简单通 用的计划框架,以用于执行任意复杂的计划任务. 我将把 java.util.Timer 和 java.util.TimerT

使用UML类图设计Java应用程序(一)

UML已成为面向对象设计的标准图形化工具,在UML定义的各种图中,本文只涉及类图.Java应用程序由许多类所构成,类图的设计与实现,是Java实现面向对象应用程序的核心.本文通过一个具体的应用程序的设计与实现过程,详细说明了利用UML类图设计Java应用程序,使得开发过程标准化.可视化,代码编程简单化. 在类图中,类被描述为带有三层的盒子. 顶层为类名,一般用加粗字体表示.如果类是抽象的,其名称用斜体表示:如果类是接口,则在类名上方标注<<interface>>. 中间层包含类的属