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