如何有效地同时运行10-15个线程

时间:2011-05-24 16:23:13

标签: java multithreading

我正在尝试同时运行多个线程,其中每个线程都计算特定时间点的值并返回结果。我正在考虑使用Executor类,但似乎没有正确地执行它。我想知道这段代码是否正确。或者这样做的最佳方式是什么?

ExecutorService tasker = Executors.newFixedThreadPool(20);
    for(double t = 0.0; t<=5.0; t = t + 0.50 ){ // t is time interval
        tasker.execute(new MyThread(t));
    }

2 个答案:

答案 0 :(得分:4)

你不需要在execute方法中传递一个Thread。 相反,您需要传递一个Runnable对象,如下所示:

ExecutorService tasker = Executors.newFixedThreadPool(20);
for(double t = 0.0; t<=5.0; t = t + 0.50 ){ // t is time interval
    tasker.execute(new MyRunnable(t));
}
....
....
class MyRunnable implements Runnable
{
    MyRunnable(double i)
    {
       System.out.println(i);
       ...
    }
}

答案 1 :(得分:1)

要真正同时运行10-15个线程,您需要拥有10-15个免费核心。但是,如果您拥有这么多可用内核,则需要确保拥有至少包含这么多线程的池,并且至少需要执行这么多任务。

对于CPU绑定进程,最佳线程数通常是您拥有的核心数。 (有时用超线程加倍)

需要注意的是使用floatdouble的循环。这些类型可能会出现舍入错误,每次迭代都会累积。使用整数并计算你的价值要好得多。

for(int i=0;i<=10;i++) {
   double t= i/2.0;
   tasker.execute(new MyRunnable(t));
}