我是靠谱客的博主 高兴云朵,最近开发中收集的这篇文章主要介绍【Java多线程】线程优先级:优先级高,执行机会多,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

常用的优先级

一般来说,优先级的范围为1-10,但在个别的操作系统上有所不同。
优先级高的线程,在运行的时候将会获得更多的运行机会。

代码

package cn.hanquan.test;

import java.io.FileNotFoundException;

/*
 * 优先级高的线程 获得更多的运行机会
 */

public class TestP {
	public static void main(String[] args) throws InterruptedException, FileNotFoundException {

		// 我的线程类
		MyP mp = new MyP();

		// 建立线程数组
		Thread t1 = new Thread(mp);
		Thread t2 = new Thread(mp);

		t1.setPriority(1);
		t2.setPriority(10);

		t1.start();
		t2.start();
	}
}

class MyP implements Runnable {
	@Override
	public void run() {
		Thread.yield();
		for (int i = 0; i < 100; i++) {
			System.out.println(
					Thread.currentThread().getName() + " --> Priority " + Thread.currentThread().getPriority());
		}
	}
}

运行结果

Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-1 --> Priority 10
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1
Thread-0 --> Priority 1


附:之前错误的理解,留着没删,是因为里面有建立线程数组的方式,可能会用到。

错误之处在于:线程的优先级体现在获得运行的概率上,而不是体现在开始运行的顺序上。

package cn.hanquan.test;

import java.io.FileNotFoundException;

/*
 * 线程优先级的是 优先级高的先运行的概率大
 */

public class TestP {
	public static void main(String[] args) throws InterruptedException, FileNotFoundException {

		// 我的线程类
		MyP mp = new MyP();

		// 建立线程数组
		Thread[] t = new Thread[100];

		// 设定线程优先级
		for (int i = 0; i < 50; i++) {
			t[i] = new Thread(mp);
			t[i].setPriority(1);// MIN_PRIORITY
		}
		for (int i = 50; i < 100; i++) {
			t[i] = new Thread(mp);
			t[i].setPriority(10);// MAX_PRIORITY
		}

		// 开启线程 这里开启的顺序对实际线程的开始顺序也有一定的影响
		// sxt300级中没有使用数组 好像就没有这种影响?
		for (int i = 0; i < 100; i++) {
			t[i].start();
		}
	}
}

class MyP implements Runnable {
	@Override
	public void run() {
		Thread.yield();
		System.out.println(Thread.currentThread().getName() + " --> Priority " + Thread.currentThread().getPriority());
	}

}

运行结果

运行结果并没有完全符合预期

但是如果把30行的递增序改为递减序,几乎每一次都是优先级为10的线程先运行,优先级为1的线程后运行,这样大概可以说明线程优先级对于运行顺序的的影响。
在这里插入图片描述

最后

以上就是高兴云朵为你收集整理的【Java多线程】线程优先级:优先级高,执行机会多的全部内容,希望文章能够帮你解决【Java多线程】线程优先级:优先级高,执行机会多所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部