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

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.增加变量的速度与线程无关,这是原始数据类型的问题,如下面的评论中所述.

Dur*_*dal 5

这与线程无关.仔细看看你的代码(顺便说一句,这是一个烂摊子),第一个例子使用int i作为循环索引,第二个使用double i作为循环索引.Double是一种不同的数据类型,通常比int慢得多.