Java多线程编程核心技术(第3版)
上QQ阅读APP看书,第一时间看更新

1.14.3 线程优先级的随机性

前面提到,线程的优先级较高则优先执行完,但这个结果不是绝对的因为线程的优先级还具有随机性,也就是优先级较高的线程不一定每一次都先执行完。

创建名称为t20的项目,文件MyThread1.java代码如下:


package extthread;

import java.util.Random;

public class MyThread1 extends Thread {
@Override
public void run() {
    long beginTime = System.currentTimeMillis();
    for (int i = 0; i < 1000; i++) {
        Random random = new Random();
        random.nextInt();
    }
    long endTime = System.currentTimeMillis();
    System.out.println("★★★★★thread 1 use time=" + (endTime - beginTime));
}
}

文件MyThread2.java代码如下:


package extthread;

import java.util.Random;

public class MyThread2 extends Thread {
@Override
public void run() {
    long beginTime = System.currentTimeMillis();
    for (int i = 0; i < 1000; i++) {
        Random random = new Random();
        random.nextInt();
    }
    long endTime = System.currentTimeMillis();
    System.out.println("☆☆☆☆☆thread 2 use time=" + (endTime - beginTime));
}
}

文件Run.java代码如下:


package test;

import extthread.MyThread1;
import extthread.MyThread2;

public class Run {
public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
        MyThread1 thread1 = new MyThread1();
        thread1.setPriority(5);
        thread1.start();

        MyThread2 thread2 = new MyThread2();
        thread2.setPriority(6);
        thread2.start();
    }
}
}

为了让结果体现随机性,将两个线程的优先级分别设置为5、6,让优先级接近一些。

文件Run.java在运行6次后输出的结果如图1-66所示。

图1-66 交错执行完

那么,根据此实验可以得出一个结论,不要把线程的优先级与运行结果的顺序作为衡量的标准,优先级较高的线程并不一定每一次都先执行完,它们具有不确定性、随机性。