1. 程式人生 > >java多執行緒程式設計之優先順序

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());
	}

}