Java 7新特性 (二)

原创|其它|编辑:郝浩|2009-04-20 09:21:33.000|阅读 464 次

概述:Java 7新特性

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

解决时间间隔问题

现有Java的Date和Calendar类一直都未能满足开发者的需要,一直都是开发者们的痛处。JSR 310:数据和时间API(Date and Time API)的目的就是提供一个完整的、功能齐备的Date和Time API。

JSR 310日期/时间API试图通过提供更好的性能和易用性改进Java的当前日期/时间API。例如,Java Calendar类将日期同时存储为与标准纪元之间的偏移量(以毫秒为单位)以及一组日历字段(例如,星期几、几号以及月份)。此双精度表示导致在意外的 时间重新计算日历字段,从而产生不可预测的性能特点。与此相比,JSR 310类仅将日期/时间表示存储为与Date和Calendar所使用的同一标准纪元之间的偏移量(以毫秒为单位);仅当需要时才会计算日期等日历字段, 并且不会使用这些日历字段进行内部日期表示。

JSR 310还对当前Java日期/时间模型进行了改进。Java 6 API不包含表示本地时间(不具有关联时区的时间)、持续时间或时间间隔的类。这迫使程序员使用令人困惑的设计做法,例如使用int表示持续时间。JSR 310包含表示上述各个概念的类,从而可以进行更为明确的程序设计。

最后,JSR 310 API通过使用不可改变的类努力实现线程安全。Java当前的日期/时间类Date和Calendar都是可改变的,因而都不是线程安全的。

更强的并行处理能力

JSR 166y是一个修订版JSR,它带给我们J2SE 5.0中所有java.util.concurrent的优点,以及Java SE 6中的全部更新。JSR 166y中的主要新增功能,是一个叫做fork/join的新并行处理包。尤其值得一提的是,fork/join提供了对分而治之算法的支持。fork /join库的核心是一个叫做ForkJoinPool的新类和实现问题分解的一系列任务类型。

多数典型应用一般不使用一个框架来解决计算密集型的分而治之算法。但是,JSR 166y还提供了一个新的功能式API,实现数组的并行处理。ParallelArray是一个可用于fork/join算法的数据结构,它提供了一个通 用目的API,以高度并发的方式执行数据集的搜索、过滤和转换。其真正好处是,这些操作可以通过ForkJoinPool并行执行,在将来的多核计算时 代,可以无需修改函数即可自动充分利用多核处理能力。至于ParalleArray是作为JDK的一部分包含在Java SE 7中,还是将作为一个外部库发布,现在尚处于考虑之中。

Listing 3演示了如何使用ParalleArray来管理donuts的大量集合。

Listing 3

// Instantiate the ForkJoinPool with a concurrency level
ForkJoinPool fj = new ForkJoinPool(16);
Donut[] data = ...
ParallelArray donuts = new ParallelArray(fj, data);
// Filter
Ops.Predicate hasSprinkles = new Ops.Predicate() {
public boolean op(Donut donut) {
return donut.hasSprinkles();
}
};
// Map from Donut -> Integer
Ops.Predicate daysOld = new Ops.ObjectToInt() {
public int op(Donut donut) {
return donut.age();
}
};
SummaryStatistics summary =
orders.withFilter(hasSprinkles)
.withMapping(daysOld)
.summary();
System.out.println("with sprinkles: " + summary.size());
System.out.println("avg age: " + summary.average());

J2SE 5.0中引入的并行功能和其在Java SE 6中的改进,为我们在4核或8核服务器上编写并行应用程序提供了坚实的基础。而fork/join库则又向前更深入了一步,可以支持更多处理器的应用程序 编写,诸如未来几年中我们将使用的16核到32核计算机。它缓解了我们所面临的并行计算问题,但并未真正解决它。现在业界中的每一个人都在寻找可以利用多 核世界进行编程的方法。尽管Java在此方面有一定领先优势,但共享状态的并发编程不可能在未来十年中都满足所有需求。Fork/join只是进一步的尝 试。

通过注释实现更好的决策

J2SE把我们带入了Java注释的世界,在Java SE 6中,我们只可以对类、方法、字段和变量声明进行注释。JSR 308:Java类中的标注(Annotations on Java Types)允许注释出现在任何可用的类型上,使得更具表现力和准确性的系统成为可能。

在JSR 305:供检查软件缺陷用的注解(Annotations for Software Defect Detection)中尽管定义了一些注释,但是JSR本身并不定义任何更多的注释。JSR 305的目的是让开发者更准确的定义方法调用情况,诸如是否允许为空,集合是否可以为空集合等等。

Listing 4演示了如何使用一个新注释。

Listing 4

// A more precise class definition:
class UnmodifiableList implements @Readonly List<@Readonly T> { ... }
// A more precise variable declaration:
List str = new @NonEmpty @Readonly ArrayList(stringSet);

注释处理器可以被插入到编译器中,以在编译的时候验证这些注释。This allows a great deal more specificity and precision, but it comes with a heavy cost of verbosity and will certainly fill some Java users with dread.

 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:自互联网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP