《Java多线程编程核心技术(第2版)》 —1.14.3 优先级的随机性
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 交错执行完
根据此案例可以得出一个结论,优先级较高的线程并不一定每一次都先执行完run()方法中的任务,也就是线程优先级与输出顺序无关,这两者并没有依赖关系,它们具有不确定性、随机性。
- 点赞
- 收藏
- 关注作者
评论(0)