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

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

本节将学习如何使用ForkJoinPool和ForkJoinTask类所提供的异步方法来管理任务。我们将实现一个程序:在一个文件夹及其子文件夹中来搜索带有指定扩展名的文件。ForkJoinTask类将实现处理这个文件夹的内容。而对于这个文件夹中的每一个子文件,任务将以异步的方式发送一个新的任务给ForkJoinPool类。对于每个文件夹中的文件,任务将检查任务文件的扩展名,如果符合条件就将其增加到结果列表中。

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

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

1.创建名为FolderProcessor的类,并继承RecursiveTask类,RecursiveTask类的泛型参数为List类型。

public class FolderProcessor extends RecursiveTask<List<String>> {

2.声明类的serialVersionUID属性。这个元素是必需的,因为RecursiveTask类的父类ForkJoinTask实现了Serializable接口。

private static final long serialVersionUID = 1L;

3.声明一个名为path的私有String属性,用来存储任务将要处理的文件夹的完整路径。

private String path;

4.声明一个名为extension的私有String属性,用来存储任务将要查找的文件的扩展名。

private String extension;

5.实现类的构造器,用来初始化这些属性。

public FolderProcessor (String path, String extension) {

    this.path=path;

    this.extension=extension;

}

6.实现compute()方法。既然指定了RecursiveTask类泛型参数为List类型,那么,这个方法必须返回一个同样类型的对象。

@Override

protected List<String> compute() {

7.声明一个名为list的String对象列表,用来存储文件夹中文件的名称。

List<String> list=new ArrayList<>();

8.声明一个名为tasks的FolderProcessor任务列表,用来存储子任务,这些子任务将处理文件夹中的子文件夹。

List<FolderProcessor> tasks=new ArrayList<>();

9.获取文件夹的内容。

File file=new File(path);

File content[] = file.listFiles();

10.对于文件夹中的每一个元素,如果它是子文件夹,就创建一个新的FolderProcessor对象,然后调用fork()方法采用异步方式来执行它。

if (content != null) {

    for (int i = 0; i < content.length; i++) {

        if (content[i].isDirectory()) {

            FolderProcessor task=new FolderProcessor(content[i].getAbsolutePath(), extension);

            task.fork();

            tasks.add(task);


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

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

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