线程的优先级

简介: 1、线程优先级简介   Java中线程可以有优先级的设定,高优先级的线程比低优先级的线程将会获得更高的执行几率,线程的优先级是一个整数,其取值范围是1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )。线程默认的优先级是5。   获取线程优先级:public final int getPriority();   更改线程优先级:

1、线程优先级简介


  Java中线程可以有优先级的设定,高优先级的线程比低优先级的线程将会获得更高的执行几率,线程的优先级是一个整数,其取值范围是1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )。线程默认的优先级是5。

  获取线程优先级:public final int getPriority();

  更改线程优先级:public final void setPriority(int newPriority)。

  注意:优先级只是改变被执行的几率,优先级越大,会让线程获较多的执行机会。


2、优先级示例


  (1)待处理线程


<span style="font-size:18px;">public class PriorityDemo implements Runnable {

	@Override
	public void run() {
		for (int x = 0; x < 100; x++) {
			System.out.println(Thread.currentThread().getName() + "---" + x);
		}
	}
}</span>


   (2)测试类


<span style="font-size:18px;">public class PriorityDemoTest {
	public static void main(String[] args) {
		PriorityDemo pd = new PriorityDemo();

		Thread t1 = new Thread(pd);
		Thread t2 = new Thread(pd);
		Thread t3 = new Thread(pd);

		t1.setName("线程一");
		t2.setName("线程二");
		t3.setName("线程三");

		// IllegalArgumentException
		// 抛出此异常表明向方法传递了一个不合法或不正确的参数,即数值不在优先级范围内,如下
		//t1.setPriority(10000);

		// 通过下面方法可获取线程优先级
//		System.out.println(t1.getPriority());
//		System.out.println(t2.getPriority());
//		System.out.println(t3.getPriority());
		
		t3.setPriority(10); //所以t1会获得更多的执行机会
		t1.setPriority(1);
		t2.setPriority(1);

		 t1.start();
		 t2.start();
		 t3.start();
	}
}</span>


   执行结果:线程一将会获得更多的执行机会,所以先期它的执行频率会大于线程t2和t3。


3、yield()方法


  方法:public static void yield(),暂停当前正在执行的线程对象,并执行其他线程。

  这个方法是为了让线程更和谐一些的运行,但是它只能暂停一下当前的进程,之后CPU的执行权被哪个线程抢到就不一定了,兴许暂停之后还是这个线程抢到执行权。所以如果要真正实现数据依次输出,不要依赖这个方法保证,需使用等待唤醒机制。


  实例:


    待处理线程类:


<span style="font-size:18px;">public class YieldDemo implements Runnable {
	@Override
	public void run() {
		for (int x = 0; x < 100; x++) {
			System.out.println(Thread.currentThread().getName() + "---" + x);
			// public static void yield()

			//线程内容执行完后就等(暂停)一下
			Thread.yield();
		}
	}
}</span>

    测试类:


<span style="font-size:18px;">public class YieldDemoTest {
	public static void main(String[] args) {
		PriorityDemo pd = new PriorityDemo();

		Thread t1 = new Thread(pd);
		Thread t2 = new Thread(pd);

		t1.setName("我是线程一");
		t2.setName("我是线程二");

		t1.start();
		t2.start();
	}
}</span>



目录
相关文章
|
6月前
|
算法 Unix 调度
【Qt 线程】深入探究QThread线程优先级:原理、应用与最佳实践
【Qt 线程】深入探究QThread线程优先级:原理、应用与最佳实践
531 0
|
6月前
|
算法 Unix Linux
Linux与Qt线程优先级的对应关系:一次全面解析
Linux与Qt线程优先级的对应关系:一次全面解析
89 0
|
并行计算 安全 Java
深入理解Java并发编程:并行与并发、进程与线程、优先级、休眠与让步
深入理解Java并发编程:并行与并发、进程与线程、优先级、休眠与让步
324 0
|
Java 调度
Java线程的优先级
Java线程的优先级
83 0
|
6月前
|
消息中间件 安全 前端开发
小米面试:如何实现优先级线程池?
我们知道,线程池中的所有线程都是由统一的线程工厂来创建的,当我们指定线程工厂时,线程池中的所有线程会使用我们指定的线程工厂来创建线程;但如果没有指定线程工厂,则会使用默认的线程工厂 DefaultThreadFactory 来创建线程,核心源码如下: ```java DefaultThreadFactory() { @SuppressWarnings("removal") SecurityManager s = System.getSecurityManager(); group = (s != null) ? s.getThreadGroup() :
74 1
小米面试:如何实现优先级线程池?
|
1月前
|
Java Linux 调度
Java线程的优先级详解
Java线程的优先级机制允许开发者根据程序需求为线程设定不同优先级,范围通常在1到10之间,默认优先级为5。高优先级线程在执行时通常会得到更多的CPU时间,但这并不意味着低优先级线程会被完全忽略。系统资源分配仍然取决于具体的调度策略。理解线程优先级有助于优化多线程应用的性能。
|
6月前
|
资源调度 算法 Linux
Linux进程/线程的调度机制介绍:详细解析Linux系统中进程/线程的调度优先级规则
Linux进程/线程的调度机制介绍:详细解析Linux系统中进程/线程的调度优先级规则
1621 0
|
4月前
线程的优先级
线程的优先级
|
6月前
|
安全 Java 调度
【C/C++ 线程池设计思路 】设计与实现支持优先级任务的C++线程池 简要介绍
【C/C++ 线程池设计思路 】设计与实现支持优先级任务的C++线程池 简要介绍
192 2
|
iOS开发
iOS多线程之NSOperationQueue-依赖、并发数、优先级、自定义Operation等最全的使用总结
iOS多线程之NSOperationQueue-依赖、并发数、优先级、自定义Operation等最全的使用总结
478 0

相关实验场景

更多
下一篇
无影云桌面