gpt4 book ai didi

java - 一个线程比另一个慢,即使他们做同样的事情

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:53 25 4
gpt4 key购买 nike

我只是通过尝试创建一些小程序来学习多线程,我发现了一件具体的事情,我不确定为什么会这样。

我有两个类(class),他们都数到 20 亿,最后他们打印出他们完成这件事所花费的时间。它们在不同的文件中。第一个可以在大约 2 秒内完成(它会更快,但我也在那里做其他事情),new Thread(new Runnable())

在主类中要慢得多,大约需要 8 秒。你能解释一下为什么吗?这是代码。谢谢。

public class First implements Runnable {

private long startTime, endTime;
public static double count = 0;

@Override
public void run() {
startTime = System.currentTimeMillis();

for (int count = 0; count <= 2000000000L; count++);

endTime = System.currentTimeMillis();
System.out.println(endTime - startTime); //it is done in about 2seconds
}
}


public class Threads {

public static void main(String[] args){

First f = new First();
f.run();

new Thread(new Runnable() {

@Override
public void run() {

long startTime, endTime;
double count;
startTime = System.currentTimeMillis();

for (count = 0; count < 2000000000L; count++)l

endTime = System.currentTimeMillis();
System.out.println(endTime - startTime); //about 8 seconds

}
}).start();
}
}

更新

问题在第 4 行,我没有意识到变量 count 是 double 的,在第 10 行,在 for 循环中我使用了 int。递增变量的速度与线程无关,这是下面评论中提到的原始数据类型的问题。

最佳答案

这与线程无关。仔细查看您的代码(顺便说一下,这是一团糟),第一个示例使用 int i 作为循环索引,第二个示例使用 double i 作为循环索引。 Double 是一种不同的数据类型,通常比 int 慢得多。

关于java - 一个线程比另一个慢,即使他们做同样的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16741133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com