fork/join框架_java forkjoinpool_fork join框架(2)

电脑杂谈  发布时间:2017-04-10 18:05:20  来源:网络整理

RecursiveAction:用于任务没有返回结果的场景。

RecursiveTask:用于任务有返回结果的场景。

本章接下来将展示如何利用Fork/Join框架高效地工作。

在本节,我们将学习如何使用Fork/Join框架的基本元素。它包括:

创建用来执行任务的ForkJoinPool对象;

创建即将程池中被执行的任务ForkJoinTask子类。

本范例中即将使用的Fork/Join框架的主要特性如下:

采用默认的构造器创建ForkJoinPool对象;

在任务中将使用JavaAPI文档推荐的结构。

if (problem size > default size){

    tasks=divide(task);

    execute(tasks);

} else {

    resolve problem using another algorithm;

}

我们将以同步的方式执行任务。当一个主任务执行两个或更多的子任务时,这个主任务将等待子任务的完成。用这种方法,执行主任务的线程,称之为工作者线程(Worker Thread),它将寻找其他的子任务来执行,并在子任务执行的时间里利用所有的线程优势。

如果将要实现的任务没有返回任何结果,那么,采用RecursiveAction类作为实现任务的基类。

本节的范例是在EclipseIDE里完成的。无论你使用Eclipse还是其他的IDE(比如NetBeans),都可以打开这个IDE并且创建一个新的Java工程。

在本节,我们将实现一项更新产品价格的任务。最初的任务将负责更新列表中的所有元素。我们使用10来作为参考大小(ReferenceSize),如果一个任务需要更新大于10个元素,它会将这个列表分解成为两部分,然后分别创建两个任务用来更新各自部分的产品价格。

按照接下来的步骤实现本节的范例。

1.创建一个名为Product的类,用来存储产品的名称和价格。

public class Product {

2.声明一个名为name的私有String属性,一个名为price的私有double属性。

private String name;

private double price;

3.实现两个属性各自的设值与取值方法。

public String getName() {

    return name;

}

public void setName(String name) {

    this.name = name;

}

public double getPrice() {

    return price;

}

public void setPrice(double price) {

    this.price = price;

}

4.创建一个名为ProductListGenerator的类,用来生成一个随机产品列表。

public class ProductListGenerator {

5.实现generate()方法。接收一个表示列表大小的int参数,并返回一个生成产品的List列表。

public List<Product> generate (int size) {

6.创建返回产品列表的对象ret。

List<Product> ret=new ArrayList<Product>();

7.生成产品列表,给所有的产品分配相同的价格,比如可以检查程序是否运行良好的数字10。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40557-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...