Java线程执行时间不一致

时间:2018-08-20 21:16:08

标签: multithreading

我只是在尝试多线程,即用随机数填充数组,然后比较两个线程和一个线程花费的时间。问题是第一个线程的时间比第二个线程的时间长得多。

代码:

class createList extends Thread
{
    int[] array = new int[25000000];

    public void run() {
        for (int i = 0; i < 25000000; i++)
        {
            array[i] = randomNumber();
        }
    }

    public static int randomNumber()
    {
        Random random = new Random();
        return random.nextInt(50);
    }
}

public class Main {

    public static void main(String[] args) {

        createList listcreator1 = new createList();
        createList listcreator2 = new createList();

        listcreator1.start();
        listcreator2.start();

        Stopwatch sw = new Stopwatch();
        listcreator1.run();
        System.out.println(sw.elapsedTime());

        Stopwatch sw3 = new Stopwatch();
        listcreator2.run();
        System.out.println(sw3.elapsedTime());

        Stopwatch sw2 = new Stopwatch();
        int[] array = new int[50000000];
        for (int i = 0; i < 50000000; i++)
        {
            array[i] = randomNumber();
        }
        System.out.println(sw2.elapsedTime());


    }

    public static int randomNumber()
    {
        Random random = new Random();
        return random.nextInt(50);
    }
}

,控制台输出为    5.024,             0.945,             1.889

造成巨大差异的原因是什么?

1 个答案:

答案 0 :(得分:0)

实际上,在第一次测量时,您会进行3次计算。您已经在后台启动了2个线程(使用“ start”方法),并在当前线程启动了1个线程(通过“ run”方法)。运行不会创建新线程。只需在当前执行操作即可,这是简单的方法执行。

其他测量无需在后台执行任何作业,因此可以更快完成。