线程优先级测试

当可运行状态的线程很多,那么优先极高的线程将会先执行。

线程的优先级用1-10之间的整数表示,数值越大优先级越高,默认的优先级为5。

线程还有三个常量,看下面的测试类。

下面弄个小例子。

1.线程类

package com.citi.thread;

public class ThreadTest extends Thread{


 public void run(){
  
  System.out.println("Thread Name : " +this.getName() );
  
 }
}

2.测试类:

package com.citi.thread;

public class Test {

 public static void main(String[] args){
  ThreadTest t1= new ThreadTest();
//  t1.setPriority(Thread.MAX_PRIORITY);
  t1.start();
  
  ThreadTest t2= new ThreadTest();
//  t2.setPriority(Thread.NORM_PRIORITY);
  t2.start();  
  
  ThreadTest t3= new ThreadTest();
//  t3.setPriority(Thread.MIN_PRIORITY);
  t3.start();  
  
 }
}

如果这么写,那么线程的执行是无序的,也就是JVM想跑哪个跑哪个。

显示的结果可能是:(排列组合,3个线程这里可以显示6种情况)

Thread Name : Thread-0
Thread Name : Thread-2
Thread Name : Thread-1

这里如果给注释部分去掉,那么就是加了优先极了。那么可不可以达到我们的理想效果呢。

Thread Name : Thread-0
Thread Name : Thread-1
Thread Name : Thread-2

测试结果表明多数时候是我们的理想效果,但是也会无序,也就是说线程的优先级并不能保证,优先级高的线程先运行,这要怎么办呢。等以后想到了再写,

实在不行,你可以让不想跑的线程先睡会。


 


 

 

在多线程编程中,合理设置线程优先级对于确保程序的性能和响应性至关重要。不同的编程环境提供了不同的机制来调整线程优先级。以下是几种常见语言中设置线程优先级的方法及其建议。 ### Java 中的线程优先级设置 Java 提供了 `Thread` 类的 `setPriority(int newPriority)` 方法来设置线程优先级。Java 线程优先级范围从 1 到 10,其中 `Thread.MIN_PRIORITY` 是 1,`Thread.NORM_PRIORITY` 是 5,而 `Thread.MAX_PRIORITY` 是 10 [^2]。然而,在大多数情况下,默认的优先级(5)足以满足需求。Java 的线程调度器在默认优先级下通常已经足够公平和高效。因此,只有在特殊需求下才需要手动调整线程优先级。 ### Android 中的线程优先级设置 Android 提供了两种设置线程优先级的方式: - 使用 `Thread` 类实例的 `setPriority` 方法。 - 使用 `Process` 类的 `setThreadPriority` 方法。 这两种方法都可以用来调整线程优先级,但需要注意的是,过度使用或不当使用线程优先级可能会导致应用程序的不稳定或性能下降 [^1]。 ### C++ 中的线程优先级设置 C++ 标准库本身并没有直接提供设置线程优先级的功能,但可以通过平台相关的 API 来实现。例如,在 POSIX 系统上可以使用 `pthread_setschedparam` 函数来设置线程调度参数,包括优先级。下面是一个使用自定义类 `PriorityThread` 来设置线程优先级的例子: ```cpp // 相机采集线程示例 PriorityThread camera_thread(ThreadPriority::Highest); camera_thread.Start([]{ while (!stop_requested) { // 相机采集和处理代码 } }); // 数据处理线程使用普通优先级 std::thread processing_thread([]{ // 数据处理代码 }); ``` 在这个例子中,`PriorityThread` 是一个假设存在的类,它允许设置线程优先级为最高。对于实际的实现,可能需要依赖于特定的操作系统 API。 ### 合理设置线程优先级的建议 当决定是否调整线程优先级时,应该考虑以下几点: - **评估需求**:只有当默认优先级无法满足实时性或响应性需求时,才应调整线程优先级。 - **测试影响**:调整线程优先级后,应进行全面测试以确保不会导致其他部分的功能受影响。 - **避免饥饿**:确保低优先级线程不会因为高优先级线程的存在而得不到执行的机会。 通过上述方法和技术,可以根据具体的应用场景来合理地设置线程优先级,从而优化应用程序的性能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值