我只是通过尝试创建一些小程序来学习多线程,我发现了一件具体的事情,我不确定为什么会这样。
我有两个班,他们都数到 20 亿,最后他们打印出他们做这件事的时间。它们位于单独的文件中。第一个可以在大约 2 秒内完成(它会更快,但我也在那里做其他事情),以及新的 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 行,我没有意识到变量计数是双倍的,而在第 10 行,在for循环中我使用了int。递增变量的速度与线程无关,这是原始数据类型的问题,如下面的评论中所述。