Java-线程计算更慢

Java-线程计算更慢,java,java-threads,Java,Java Threads,我正在努力加快我的程序的计算速度。但使用线程会使其速度变慢。以下是简化的代码: 在此数组中,尝试对每个数字求和。 例如:单位位数=3+6 List<String> myArr = new ArrayList<String>(); myArr.add("123"); myArr.add("456"); 使用线程计算时: /* USING THREAD */ ExecutorService pool = Executors.newFixedThreadPool(3);

我正在努力加快我的程序的计算速度。但使用线程会使其速度变慢。以下是简化的代码:

在此数组中,尝试对每个数字求和。 例如:单位位数=3+6

List<String> myArr = new ArrayList<String>();
myArr.add("123");
myArr.add("456");
使用线程计算时:

/* USING THREAD */ 

ExecutorService pool = Executors.newFixedThreadPool(3);

long startTime2 = System.nanoTime();

pool.execute(new UnitsDigit(myArr));
pool.execute(new TensDigit(myArr));
pool.execute(new HundredsDigit(myArr));

pool.shutdown();

long endTime2 = System.nanoTime();
double estimatedTime2 = (endTime2 - startTime2)/1000000.0;

System.out.println(estimatedTime2 + " milliseconds");
输出:

0.0285 milliseconds
2.5015 milliseconds

哪一部分我做错了?线程应该更快。

一个典型的新手误解:使用多个线程并不一定会导致更快的执行

线程最终由底层操作系统管理。因此,创建这样的线程会带来一定的开销!因此,只有当相应的“任务”有一定的持续时间时,使用多线程才有意义。除此之外,您还需要一个能够并行运行所有线程的CPU,否则使用单个线程进行计算工作会再次失败

换句话说:在一个简单的计算中抛出多个线程,只需要“相对较少”的毫秒或纳秒就可以完成,这会降低执行时间

最后:当您的线程花费大量时间等待某件事情发生时(比如执行文件io),多线程的真正好处就出现了


因此:当您打算用一个线程与多个线程进行有意义的实验时,您必须在定义设置时包含这些细节

您错过了
等待终止
,并且似乎没有对结果做任何事情。2.5毫秒并不长。可能与启动时间有关。你正在做更多的工作。无论是在开销方面,还是在循环本身(真正的工作是访问非连续内存,而不是进行整数加法)。添加了
等待终止
,但似乎与此无关。实际上,我只是试着用5000个数字,没关系。我的意思是线程更快,正如你所说的2.5毫秒并不长。每件事都是关于数据的吗?这实际上是一个家庭作业,但我认为线程在每种情况下都工作得更快。据我所知,在使用线程之前,询问“它对速度有多大帮助”会更好。谢谢!
2.5015 milliseconds