精华内容
下载资源
问答
  • 怎么设置线程的优先级
    千次阅读
    2021-09-08 11:45:26
    更多相关内容
  • VC++6.0做的一个创建多线程设置不同的优先级的小程序
  • 设置线程优先级

    2020-08-06 15:45:16
    1,设置线程优先级 setPriority()设置线程优先级 public class Demo7_Priority { public static void main(String[] args) { Thread t1 = new Thread(){ public void run() { for(int i = 0; i < 100; ...

    1,设置线程的优先级

    setPriority()设置线程的优先级

    public class Demo7_Priority {

    public static void main(String[] args) {
    
        Thread t1 = new Thread(){
    
            public void run() {
    
                for(int i = 0; i < 100; i++) {
    
                    System.out.println(getName() + "...aaaaaaaaa" );
    
                }
    
            }
    
        };
    
        
    
        Thread t2 = new Thread(){
    
            public void run() {
    
                for(int i = 0; i < 100; i++) {
    
                    System.out.println(getName() + "...bb" );
    
                }
    
            }
    
        };
    
        
    
        //t1.setPriority(10);                    设置最大优先级
    
        //t2.setPriority(1);
    
        
    
        t1.setPriority(Thread.MIN_PRIORITY);        //设置最小的线程优先级
    
        t2.setPriority(Thread.MAX_PRIORITY);        //设置最大的线程优先级
    
        
    
        t1.start();
    
        t2.start();
    
    }
    

    }

    展开全文
  • Android 中设置线程优先级的正确方式(2种方法) 在 Android 中,有两种常见的设置线程优先级的方式: 第一种,使用 Thread 类实例的 setPriority 方法,来设置线程优先级。 第二种,使用 Process 类的 ...

    Android 中设置线程优先级的正确方式(2种方法)


    在 Android 中,有两种常见的设置线程优先级的方式:

    1. 第一种,使用 Thread 类实例的 setPriority 方法,来设置线程优先级。
    2. 第二种,使用 Process 类的 setThreadPriority 方法,来设置线程优先级。

    这两种设置线程的优先级,一种是 Java 原生版本,另一种是 Android API 版本。这两种方式是不同的,Android 更推荐使用第二种方式。

    使用 Thread 类的 setPriority 方法

    使用 Thread 类实例的 setPriority 方法,来设置线程优先级,这种方式来源于 Java,他可以通过 Java 的 Thread 属性来设置线程优先级。

    • setPriority 方法的参数是 Thread 的静态常量:
        /**
         * The minimum priority that a thread can have.
         */
        public final static int MIN_PRIORITY = 1;
    
       /**
         * The default priority that is assigned to a thread.
         */
        public final static int NORM_PRIORITY = 5;
    
        /**
         * The maximum priority that a thread can have.
         */
        public final static int MAX_PRIORITY = 10;
    

    setPriority 方法修改线程优先级时,参数范围必须在 MIN_PRIORITY 和 MAX_PRIORITY 范围之间,如果超过该范围,将抛出错误。设置成功时,此线程的优先级将设置为指定的参数和该线程的线程组的最大允许优先级中的较小者。

    也就是说,用 Thread 实例对象的 setPriority 设置线程优先级,范围为 1~10。

    我们来看一个示例:

            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
    
                }
            });
            thread.setPriority(Thread.MIN_PRIORITY);
            thread.start();
    

    使用 Process 类的 setThreadPriority 方法

    使用 Process 类(android.os.Process)的 setThreadPriority 方法,来设置线程优先级,这是 Android 推荐的方式。

    • setThreadPriority 的参数:
        //应用程序线程的标准优先级
        public static final int THREAD_PRIORITY_DEFAULT = 0;
        //最低可用优先级,仅针对那些真的不想在发生任何其他事情的情况下运行的任务。
        public static final int THREAD_PRIORITY_LOWEST = 19;
        //标准后台优先级,优先级略低于正常优先级,它对用户界面的影响非常小。
        public static final int THREAD_PRIORITY_BACKGROUND = 10;
        //用户正在进行交互的 UI 线程优先级。当用户在界面之间进行切换时,系统将自动调整应用线程的优先级。该优先级应用程序不能自己设置(也就是代码中不能设置)。
        public static final int THREAD_PRIORITY_FOREGROUND = -2;
        //系统显示线程的优先级,该优先级应用也不能自己设置。
        public static final int THREAD_PRIORITY_DISPLAY = -4;
        //最重要的显示线程的优先级,用于合成屏幕和检索输入事件。应用程序不能更改为此优先级。
        public static final int THREAD_PRIORITY_URGENT_DISPLAY = -8;
        //视频线程的标准优先级。应用程序不能更改为此优先级。
        public static final int THREAD_PRIORITY_VIDEO = -10;
        //音频线程的标准优先级。应用程序不能更改为此优先级。
        public static final int THREAD_PRIORITY_AUDIO = -16;
        //最重要的音频线程的标准优先级。应用程序不能更改为此优先级。
        public static final int THREAD_PRIORITY_URGENT_AUDIO = -19;
    

    setThreadPriority 的参数同样是一个 int 值,常量定义在 Process 类中。

    使用 Android API 为线程设置优先级也很简单,只需要在线程执行时调用 android.os.Process.setThreadPriority 方法即可。这种在线程运行时进行修改优先级,效果类似 renice。

    示例代码:

            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
                }
            });
            thread.start();
    

    Linux 系统的 nice

    Linux 中,使用 nice 值来设定一个进程的优先级,系统任务调度器根据 nice 值合理安排调度。而 Android 系统是基于 Linux 内核开发的,它的线程的内部实现,也是基于 Linux 的轻量级进程来实现的。

    我们来看 nice 的一些特征:

    • nice 的取值范围为 -20 到 19 差不多对应了 Android API 的线程优先级的取值范围。
    • nice 的值越大,进程的优先级就越低,获得 CPU 调用的机会越少,nice 值越小,进程的优先级则越高,获得 CPU 调用的机会越多。
    • 一个 nice 值为 -20 的进程优先级最高,nice 值为 19 的进程优先级最低。
    • 父进程 fork 出来的子进程继承了父进程的优先级。

    在 Android 中,无论通过什么方式设置的线程优先级,其实本质上都是通过 native 层,设置 nice 的值来实现的。

    对应关系

    MAX_PRIORITY ——> 相当于 android.os.Process.THREAD_PRIORITY_URGENT_DISPLAY。
     
    MIN_PRIORITY ——> 相当于 android.os.Process.THREAD_PRIORITY_LOWEST。
     
    NORM_PRIORITY ——> 相当于 android.os.Process.THREAD_PRIORITY_DEFAULT。
    

    在 Android 系统中,不建议使用 Java 原生的 API 设置线程优先级,因为 Android 提供的 API 划分的级别更多,更适合在 Android 系统中进行设定细致的优先级。

    线程优先级的注意事项

    • Android API 的线程优先级和 Java 原生 API 的优先级是相对独立的

    Android API 的线程优先级和 Java 原生 API 的优先级是相对独立的,比如使用 android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND) 后,使用 Java 原生 Thread.getPriority() 得到的值不会改变。

    • ANR 信息中的线程优先级

    我们在分析 ANR 日志时需要注意,在下面的 ANR 日志信息中,prio=5 中 proi 的值对应的 Java 原生 API 的线程优先级。而 nice=-2 中的 nice 表示的 Android API 版本的线程优先级。

    "main" prio=5 tid=1 NATIVE
      | group="main" sCount=1 dsCount=0 obj=0x41690f18 self=0x4167e650
      | sysTid=1665 nice=-2 sched=0/0 cgrp=apps handle=1074196899
      | state=S schedstat=( 0 0 0 ) utm=5764 stm=3654 core=2
      #00  pc 00022624  /system/lib/libc.so (__futex_syscall3+8)
      #01  pc 0000f054  /system/lib/libc.so (__pthread_cond_timedwait_relative+48)
      #02  pc 0000f0b4  /system/lib/libc.so (__pthread_cond_timedwait+64)
    
    
    • Java 原生 API 中,值越大,优先级越高;而在 Android 原生 API 中,值越小,优先级越高

    一定不要混用了线程优先级设置中的常量,Java 原生 API 中,值越大,优先级越高;而在 Android 原生 API 中,值越小,优先级越高。误用了就会出现错误。

    总结


    1. 在 Android 中,有两种常见的设置线程优先级的方式:第一种,使用 Thread 类实例的 setPriority 方法,来设置线程优先级。第二种,使用 Process 类的 setThreadPriority 方法,来设置线程优先级。
    2. Java 原生的方法 setPriority 修改线程优先级时,参数范围必须在 MIN_PRIORITY 和 MAX_PRIORITY 范围之间,如果超过该范围,将抛出错误。设置成功时,此线程的优先级将设置为指定的参数和该线程的线程组的最大允许优先级中的较小者。
    3. 使用 Android API 为线程设置优先级也很简单,只需要在线程执行时调用 android.os.Process.setThreadPriority 方法即可。这种在线程运行时进行修改优先级,效果类似 renice。
    4. 在 Android 中,无论通过什么方式设置的线程优先级,其实本质上都是通过 native 层,设置 nice 的值来实现的。
    5. Android API 的线程优先级和 Java 原生 API 的优先级是相对独立的。
    6. ANR 信息中的线程优先级,nice 代表了实际的线程优先级。
    7. 一定不要混用了线程优先级设置中的常量,Java 原生 API 中,值越大,优先级越高;而在 Android 原生 API 中,值越小,优先级越高。误用了就会出现错误。

    **PS:更多精彩内容,请查看 --> 《Android 开发》
    **PS:更多精彩内容,请查看 --> 《Android 开发》
    **PS:更多精彩内容,请查看 --> 《Android 开发》

    展开全文
  • Linux-pthread设置线程优先级

    千次阅读 2021-01-19 15:29:19
    设置线程优先级的函数: int pthread_setschedparam(pthread_t target_thread, int policy, const struct sched_param *param) 它主要用于设置线程的调用策略和优先级。 参数说明: 1. target_thread是使用...

    设置线程优先级的函数:

    int pthread_setschedparam(pthread_t target_thread, int policy, const struct sched_param *param)

    它主要用于设置线程的调用策略和优先级。

    参数说明:

    1.  target_thread是使用pthread_create所获得的线程ID。

     

    2. 线程的调度有三种策略:SCHED_OTHER、SCHED_RR和SCHED_FIFO。

     

    Policy用于指明使用哪种策略。下面我们简单的说明一下这三种调度策略。

    SCHED_OTHER

    它是默认的线程分时调度策略,所有的线程的优先级别都是0,线程的调度是通过分时来完成的。简单地说,如果系统使用这种调度策略,程序将无法设置线程的优先级。请注意,这种调度策略也是抢占式的,当高优先级的线程准备运行的时候,当前线程将被抢占并进入等待队列。这种调度策略仅仅决定线程在可运行线程队列中的具有相同优先级的线程的运行次序。

     

    SCHED_FIFO

    它是一种实时的先进先出调用策略,且只能在超级用户下运行。这种调用策略仅仅被使用于优先级大于0的线程。它意味着,使用SCHED_FIFO的可运行线程将一直抢占使用SCHED_OTHER的运行线程J。此外SCHED_FIFO是一个非分时的简单调度策略,当一个线程变成可运行状态,它将被追加到对应优先级队列的尾部((POSIX 1003.1)。当所有高优先级的线程终止或者阻塞时,它将被运行。对于相同优先级别的线程,按照简单的先进先运行的规则运行。我们考虑一种很坏的情况,如果有若干相同优先级的线程等待执行,然而最早执行的线程无终止或者阻塞动作,那么其他线程是无法执行的,除非当前线程调用如pthread_yield之类的函数,所以在使用SCHED_FIFO的时候要小心处理相同级别线程的动作。

     

    SCHED_RR

    鉴于SCHED_FIFO调度策略的一些缺点,SCHED_RR对SCHED_FIFO做出了一些增强功能。从实质上看,它还是SCHED_FIFO调用策略。它使用最大运行时间来限制当前进程的运行,当运行时间大于等于最大运行时间的时候,当前线程将被切换并放置于相同优先级队列的最后。这样做的好处是其他具有相同级别的线程能在“自私“线程下执行。

     

    3.param是struct sched_param类型的指针,它仅仅包含一个成员变sched_priority,指明所要设置的静态线程优先级。

     

    设置线程优先级的代码例子:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    #ifdef HAVE_SCHED_H

    #include <sched.h>

    #endif

     

    void setCurrentThreadHighPriority(bool value) {

      // Start out with a standard, low-priority setup for the sched params.

      struct sched_param sp;

      bzero((void*)&sp, sizeof(sp));

      int policy = SCHED_OTHER;

     

      // If desired, set up high-priority sched params structure.

      if (value) {

        // FIFO scheduler, ranked above default SCHED_OTHER queue

        policy = SCHED_FIFO;

        // The priority only compares us to other SCHED_FIFO threads, so we

        // just pick a random priority halfway between min & max.

        const int priority = (sched_get_priority_max(policy) + sched_get_priority_min(policy)) / 2;

     

        sp.sched_priority = priority;

      }

     

      // Actually set the sched params for the current thread.

      if (0 == pthread_setschedparam(pthread_self(), policy, &sp)) {

        printf("IO Thread #%d using high-priority scheduler!", pthread_self());

      }

    }

      

    描述来自:https://baike.baidu.com/item/pthread_setschedparam/7033773

    展开全文
  • Qt开发之路36---设置线程优先级QThread

    千次阅读 2021-08-09 17:36:31
    一:Qt的线程优先级 QThread::IdlePriority 0 scheduled only when no other threads are running. QThread::LowestPriority 1 scheduled less often than LowPriority. QThread::LowPriority 2 scheduled less ...
  • JAVA中设置线程优先级与获取线程优先级 void setPriority(int priority) 设置线程优先级 int getPriority() 获取线程优先级 优先级比较高的获取CPU时间片可能会多一些,(但也不完全是,大概率是多的) 线程是有...
  • 线程设置优先级

    2018-05-31 21:06:30
    JAVA多线程,并设置优先级案例,一段完整的程序,加上自己的东西就可以跑起来
  • /* * Java是如何对线程进行调用呢? * 线程有两种调度模型: * 分时调度模型 : * 所有线程轮流使用CPU的使用权, * 平均分配每个线程的占用CPU的时间 ... * 优先让优先级高的线程使用CPU,如果线程优先级 *
  • 对于Android平台上的线程优先级设置来说可以处理很多并发线程的阻塞问题,比如很多无关紧要的线程会占用大量的CPU时间,虽然通过了MultiThread来解决慢速I/O但是合理分配优先级对于并发编程来说十分重要
  • 如何设置线程优先级

    千次阅读 2018-03-06 18:15:45
    1.创建线程时的参数中,含有设置优先级的参数,设置进去即可 例子: AfxBeginThread(Thread****, this, THREAD_PRIORITY_TIME_CRITICAL); 2.设置进程的优先级 线程优先级与进程有关,如果进程的优先级最高,那么...
  • #include
  • Linux线程优先级设置

    2022-06-06 10:35:32
    1.SCHED_OTHER 分时调度策略2.SCHED_FIFO 实时调度策略,先到...首先,可以通过以下两个函数来获得线程可以设置的最高和最低优先级,函数中的策略即上述三种策略的宏定义: int sched_get_priority_max(int policy);
  • 个人理解,内核级线程和进程是一样的,前者与POSIX线程(pthread)有很大的区别。因此,内核的进程调度策略和系统调用也适用于内核级线程。  调度策略有三种:  1.SCHED_NORMAL 非实时调度策略,默认情况下是100~...
  • /*** @author xingsir* 线程优先级* 线程启动后纳入到线程调度,线程时刻处于被动获取CPU时间片而无法主动获取。我们可以通过调整线程的优先级来最大程度的干涉线程调度分配时间片的几率。* 理论上优先级越高的线程...
  • 参考链接: https://blog.csdn.net/wushuomin/article/details/80051295 //详细...//线程优先级设定 1 线程创建 线程创建使用的函数接口为:pthread_create() 函数原型如下: #include <pthread.h> int pthrea
  • C# Priority:多线程优先级设置

    千次阅读 2021-05-23 05:37:06
    如果需要控制输出值的顺序,可以通过对线程优先级设置以及线程调度来实现。在 C# 中线程的优先级使用线程的 Priority 属性设置即可,默认的优先级是 Normal。在设置优先级后,优先级高的线程将优先执行。优先级的...
  • 一、获取线程优先级、 1、pthread_attr_setschedparam 和 pthread_attr_getschedparam 函数、 2、获取线程优先级代码示例、 二、设置线程调度策略、 1、pthread_attr_setschedpolicy 函数、 2、设置线程调度策略代码...
  • 对于第一次接触到python这门编程语言的朋友来说,刚刚开始学习python编程的时候对于python线程这一方面的了解比较少,在这篇文章之中我们就来了解一下python线程优先级以及python线程优先级设置方面的知识。...
  • System.out.println(Thread.currentThread().getName()+"的优先级设置为"+Thread.currentThread().getPriority()); Thread t = new Thread(new A()); t.start(); t.setName("Aa1"); } static class A implements ...
  • C#【必备技能篇】进程优先级和线程优先级设置方法
  • java设置线程优先级的方法分享
  • Java线程优先级

    2022-03-08 15:53:21
    默认优先级设置为 5 作为例外。 最低优先级设置为 1。 最大优先级设置为 10。 这里定义了3个常量,如下所示: 公共静态 int NORM_PRIORITY 公共静态 int MIN_PRIORITY 公共静态 int MAX_PRIORITY 我们将使用...
  • 线程优先级

    2022-02-18 21:46:26
    1设置和获取线程优先级 //为线程设置优先级 public final void setPriority(int newPriority) // 获取线程优先级 public final int getPriority() 2说明 进程有进程的优先级,线程也有优先级,理论上是...
  • int threadFunc(void* func) { pid_t tid = androidGetTid(); androidSetThreadPriority(tid, ANDROID_PRIORITY_AUDIO); ...通过上面的代码可以设置framework层C++的线程 优先级。参考:Audio...
  • Java如何设置线程优先级

    千次阅读 2021-04-11 13:27:49
    线程总是以某种优先级运行,通常表示为1到10之间的数字(尽管在某些情况下...关于线程优先级,需要记住的一件事是,永远不要依赖于线程优先级,因为线程调度优先级行为不能得到保证。packageorg.nhooo.example.lan...
  • java线程池多线程优先级 Java线程优先级 (Java Thread Priorities) Priority of a thread describes how early it gets execution and selected by the thread scheduler. In Java, when we create a thread, ...
  • C#.net异步Task设置线程优先级

    千次阅读 2021-04-05 02:22:42
    C#.net异步Task,如何设置线程优先级

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 314,777
精华内容 125,910
热门标签
关键字:

怎么设置线程的优先级