forkjointask.java调用invokeall(t1,t2)方法,这个方法源为什么不使用double join()方法?

时间:2015-07-05 05:20:33

标签: java multithreading concurrency

源:

public static void invokeAll(ForkJoinTask<?> t1, ForkJoinTask<?> t2) {
    t2.fork();
    t1.invoke();
    t2.join();
}

为什么不使用:

public static void invokeAll(ForkJoinTask<?> t1, ForkJoinTask<?> t2) {
    t1.fork();
    t2.fork();
    t1.join();
    t2.join();
}

1 个答案:

答案 0 :(得分:1)

根据the documentation for ForkJoinTask

  

方法invoke()在语义上等同于invoke(),但总是尝试在当前线程中开始执行。

因此t2版本与您的版本做同样的事情,但不是将两个作业都传递给两个不同的线程,而是将t1传递给另一个线程并尝试处理fork()本身。那次传球的次数较少,涉及的线程较少。

在您的版本中,当前线程无关,只需等待$('#form-section').on('click', function(e) { 两个任务。