改进并行模式下的计算时间

Improve calculation time in parallel mode

我是Java中多线程的新手,所以我有一个问题,关于如何在这个例子中减少计算时间,而不使用执行器、框架等,只使用普通线程?

public static void main(String[] args) throws TestException {

    Set<Double> res = new HashSet<>();

    for (int i = 0; i < TestConsts.N; i++) {
        res.addAll(TestCalc.calculate(i));
    }

    System.out.println(res);
}

还有计算方法:

private static final Random rnd = new Random();

public static Set<Double> calculate(int num) throws TestException {
    // Emulates calculation delay time.
    try {
        Thread.sleep(rnd.nextInt(1000) + 1);
    }
    catch (InterruptedException e) {
        throw new TestException("Execution error.", e);
    }

    Set<Double> res = new HashSet<>();

    int n = rnd.nextInt(num + 1) + 1;

    for (int j = 0; j < n; j++) {
        res.add(rnd.nextDouble());
    }

    return res;
}

没有使用任何框架的原因是想了解原来的多线程

提前致谢。

尝试创建扩展Thread或实现Runnable的class,将calculate()方法的详细信息添加到run()方法新 class.

现在在 main 函数的 for 循环中创建新 class 和 start() 类型的新线程。 您还需要同步线程。 Reference

我尽量从概念层面回答:

  • 您可以为每个任务生成一个 Thread
  • 您可以生成 n 个使用(同步)Queue<Task> 的线程来获得更多工作

只要线程完成它的部分,您就必须同步。