java多线程编程之优先级

高优先级的线程总是大部分先执行完,但是不是所有的先执行完。先执行完也不是因为先调用,如果更改优先级,先执行完和和代码的调用顺序无关。

优先级具有一定的规则性,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());
	}

}

猜你喜欢

转载自blog.csdn.net/qq_40301016/article/details/81840103
今日推荐