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

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

pool.execute(system);

pool.execute(apps);

pool.execute(documents);

21.在控制台上每隔1秒钟输出线程池的状态信息,直到这3个任务执行结束。

do {

    System.out.printf("*****************************************

    *\n");

    System.out.printf("Main: Parallelism: %d\n",pool.

    getParallelism());

    System.out.printf("Main: Active Threads: %d\n",pool.

    getActiveThreadCount());

    System.out.printf("Main: Task Count: %d\n",pool.

    getQueuedTaskCount());

    System.out.printf("Main: Steal Count: %d\n",pool.

    getStealCount());

    System.out.printf("*****************************************

    *\n");

    try {

        TimeUnit.SECONDS.sleep(1);

    } catch (InterruptedException e) {

        e.printStackTrace();

    }

} while ((!system.isDone())||(!apps.isDone())||(!documents.isDone()));

22.调用shutdown()方法关闭ForkJoinPool线程池。

pool.shutdown();

23.在控制台输出每一个任务产生的结果的大小。

List<String> results;

results=system.join();

System.out.printf("System: %d files found.\n",results.size());

results=apps.join();

System.out.printf("Apps: %d files found.\n",results.size());

results=documents.join();

System.out.printf("Documents: %d files found.\n",results.size());

下面的截图显示了范例的部分运行结果。

这个范例的重点在于FolderProcessor类。每一个任务处理一个文件夹中的内容。文件夹中的内容有以下两种类型的元素:

文件;

其他文件夹。

如果主任务发现一个文件夹,它将创建另一个Task对象来处理这个文件夹,调用fork()方法把这个新对象发送到线程池中。fork()方法发送任务到线程池时,如果线程池中有空闲的工作者线程(WorkerThread)或者将创建一个新的线程,那么开始执行这个任务,fork()方立即返回,因此,主任务可以继续处理文件夹里的其他内容。对于每一个文件,任务开始比较它的文件扩展名,如果与要搜索的扩展名相同,那么将文件的完整路径增加到结果列表中。

一旦主任务处理完指定文件夹里的所有内容,它将调用join()方法等待发送到线程池中的所有子任务执行完成。fork/join框架join()方法在主任务中被调用,然后等待任务执行结束,并通过compute()方法返回值。主任务将所有的子任务结果进行合并,这些子任务发送到线程池中时带有自己的结果列表,然后通过调用compute()方法返回这个列表并作为主任务的返回值。


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

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

    • 魏浩
      魏浩

      演技也很有亮点

    • 牛凯
      牛凯

      #易烊千玺##易烊千玺真的很不错##易烊千玺献声小王子#看着小王子觉得

    • 孙思邈
      孙思邈

      人渣一个说

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