改进并行模式下的计算时间
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>
的线程来获得更多工作
只要线程完成它的部分,您就必须同步。
我是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>
的线程来获得更多工作
只要线程完成它的部分,您就必须同步。