Multithreading Java线程执行时间不一致

Multithreading Java线程执行时间不一致,multithreading,Multithreading,我只是在试验多线程处理,我用随机数填充数组,比较两个线程和一个线程所用的时间。问题是第一个线程的时间比第二个线程的时间长得多 代码: class createList extends Thread { int[] array = new int[25000000]; public void run() { for (int i = 0; i < 25000000; i++) { array[i] = randomNu

我只是在试验多线程处理,我用随机数填充数组,比较两个线程和一个线程所用的时间。问题是第一个线程的时间比第二个线程的时间长得多

代码:

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);
    }
}
类createList扩展线程
{
int[]数组=新int[25000000];
公开募捐{
对于(int i=0;i<25000000;i++)
{
数组[i]=randomNumber();
}
}
公共静态整数随机数()
{
随机=新随机();
返回random.nextInt(50);
}
}
公共班机{
公共静态void main(字符串[]args){
createList listcreator1=新建createList();
createList listcreator2=新建createList();
listcreator1.start();
listcreator2.start();
秒表sw=新秒表();
listcreator1.run();
System.out.println(sw.elapsedTime());
秒表sw3=新秒表();
listcreator2.run();
System.out.println(sw3.elapsedTime());
秒表sw2=新秒表();
int[]数组=新int[50000000];
对于(int i=0;i<50000000;i++)
{
数组[i]=randomNumber();
}
System.out.println(sw2.elapsedTime());
}
公共静态整数随机数()
{
随机=新随机();
返回random.nextInt(50);
}
}
控制台输出是 5.024, 0.945, 1.889


产生如此大差异的原因是什么?

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

其他测量在后台没有任何作业的情况下执行,因此这是它们更快完成的方式