高优先级的线程总是大部分先执行完,但是不是所有的先执行完。先执行完也不是因为先调用,如果更改优先级,先执行完和和代码的调用顺序无关。
优先级具有一定的规则性,CPU总是尽量将执行资源让给优先级比较高的线程
优先级较高的线程不一定每一次都先执行完
package com.CUPK.lsz.TraditionalThread;
import java.util.Random;
public class Threadpriorities {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Thread(new priorities1(9)).start();
new Thread(new priorities2(5)).start();
}
}
}
class priorities1 implements Runnable {
private int prioritie;
long time;
priorities1(int prioritie) {
this.prioritie = prioritie;
}
@Override
public String toString() {
return "Thread 1 run time=" + time;
}
public void run() {
Thread.currentThread().setPriority(prioritie);
long beginTime = System.currentTimeMillis();
long addResult = 0;
for (int i = 0; i < 10000; i++) {
for (int j = 0; j < 100; j++) {
Random random = new Random();
random.nextInt();
addResult += i;
}
}
long endTime = System.currentTimeMillis();
time = endTime - beginTime;
System.out.println(this.toString());
}
}
class priorities2 implements Runnable {
private int prioritie;
long time;
priorities2(int prioritie) {
this.prioritie = prioritie;
}
@Override
public String toString() {
return "Thread 2 run time=" + time;
}
public void run() {
Thread.currentThread().setPriority(prioritie);
long beginTime = System.currentTimeMillis();
long addResult = 0;
for (int i = 0; i < 10000; i++) {
for (int j = 0; j < 100; j++) {
Random random = new Random();
random.nextInt();
addResult += i;
}
}
long endTime = System.currentTimeMillis();
time = endTime - beginTime;
System.out.println(this.toString());
}
}