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

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

29.实现范例的主类,创建Main主类,并实现main()方法。

public class Main{

public static void main(String[] args) {

30.创建Document对象,包含100行,每行1,000个词。

DocumentMock mock=new DocumentMock();

String[][] document=mock.generateDocument(100, 1000, "the");

31.创建一个DocumentTask对象,用来更新整个文档。传递数字0给参数start,以及数字100给参数end。

DocumentTask task=new DocumentTask(document, 0, 100, "the");

32.采用无参的构造器创建一个ForkJoinPool对象,然后调用execute()方法程池里执行这个任务。

ForkJoinPool pool=new ForkJoinPool();

pool.execute(task);

33.实现代码块,显示线程池的进展信息,每秒钟在控制台输出线程池的一些参数,直到任务执行结束。

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 (!task.isDone());

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

pool.shutdown();

35.调用awaitTermination()等待任务执行结束。

try {

    pool.awaitTermination(1, TimeUnit.DAYS);

} catch (InterruptedException e) {

    e.printStackTrace();

}

36.在控制台输出文档中出现要查找的词的次数。检验这个数字与DocumentMock类输出的数字是否一致。

try {

    System.out.printf("Main: The word appears %d in the document",task.get());

} catch (InterruptedException | ExecutionException e) {

    e.printStackTrace();

}


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

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

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