hoc*_*kto 3 java multithreading
我只是通过尝试创建一些小程序来学习多线程,我发现了一个特定的东西,我不知道为什么它是这样的.
我有两个课程,他们都数到20亿,最后他们打印出时间来完成它.它们位于不同的文件中.第一个可以在大约2秒内完成(它会更快,但我也在那里做其他的东西),和新的线程(新的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();
}
}
Run Code Online (Sandbox Code Playgroud)
更新
问题是在第4行,没意识到变量计数是双,和在第10行,在用于循环我用INT.增加变量的速度与线程无关,这是原始数据类型的问题,如下面的评论中所述.
这与线程无关.仔细看看你的代码(顺便说一句,这是一个烂摊子),第一个例子使用int i作为循环索引,第二个使用double i作为循环索引.Double是一种不同的数据类型,通常比int慢得多.
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |