我只是在尝试多线程,即用随机数填充数组,然后比较两个线程和一个线程花费的时间。问题是第一个线程的时间比第二个线程的时间长得多。
代码:
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
造成巨大差异的原因是什么?
答案 0 :(得分:0)
实际上,在第一次测量时,您会进行3次计算。您已经在后台启动了2个线程(使用“ start”方法),并在当前线程启动了1个线程(通过“ run”方法)。运行不会创建新线程。只需在当前执行操作即可,这是简单的方法执行。
其他测量无需在后台执行任何作业,因此可以更快完成。