精华内容
下载资源
问答
  • 设置线程优先级

    2013-03-18 11:07:22
     //设置线程优先级为后台int THREAD_PRIORITY_AUDIO //标准音乐播放使用的线程优先级int THREAD_PRIORITY_BACKGROUND //标准后台程序int THREAD_PRIORITY_DEFAULT // 默认应用的优先级int T...

    Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); //设置线程优先级为后台

    int THREAD_PRIORITY_AUDIO //标准音乐播放使用的线程优先级

    int THREAD_PRIORITY_BACKGROUND //标准后台程序

    int THREAD_PRIORITY_DEFAULT // 默认应用的优先级

    int THREAD_PRIORITY_DISPLAY //标准显示系统优先级,主要是改善UI的刷新

    int THREAD_PRIORITY_FOREGROUND //标准前台线程优先级

    int THREAD_PRIORITY_LESS_FAVORABLE //低于favorable

    int THREAD_PRIORITY_LOWEST //有效的线程最低的优先级

    int THREAD_PRIORITY_MORE_FAVORABLE //高于favorable

    int THREAD_PRIORITY_URGENT_AUDIO //标准较重要音频播放优先级

    int THREAD_PRIORITY_URGENT_DISPLAY //标准较重要显示优先级,对于输入事件同样适用。

    展开全文
  • JAVA中设置线程优先级与获取线程优先级 void setPriority(int priority) 设置线程优先级 int getPriority() 获取线程优先级 优先级比较高的获取CPU时间片可能会多一些,(但也不完全是,大概率是多的) 线程是有...

    JAVA中设置线程优先级与获取线程优先级

    • void setPriority(int priority) 设置线程优先级
    • int getPriority() 获取线程优先级
    • 优先级比较高的获取CPU时间片可能会多一些,(但也不完全是,大概率是多的)
    • 线程是有继承关系的,比如当A线程中启动B线程,那么B和A的优先级将是一样的。
    public class ThreadScheduleTest01 {
        public static void main(String[] args) {
            Thread.currentThread().setPriority(1);
            //线程优先级的最大值,最小值,默认值
    //        System.out.println(Thread.MAX_PRIORITY);
    //        System.out.println(Thread.MIN_PRIORITY);
    //        System.out.println(Thread.NORM_PRIORITY);
            //getPriority() 获取目标线程对象的优先级
            //main默认优先级是5
            System.out.println(Thread.currentThread().getName() + "————" + Thread.currentThread().getPriority());
    
            //setPriority() 修改目标线程对象的优先级
    
            System.out.println(Thread.currentThread().getName() + "————" + Thread.currentThread().getPriority());
    
            //线程是有继承关系的,比如当A线程中启动B线程,那么B和A的优先级将是一样的。
            Thread t = new Thread(new MyRunnable5());
            t.setPriority(10);
            t.start();
        }
    }
    class MyRunnable5 implements Runnable{
        @Override
        public void run() {
            //run默认优先级是5
            System.out.println(Thread.currentThread().getName() + "————" + Thread.currentThread().getPriority());
        }
    }
    
    
    展开全文
  • 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中设置线程优先级How to set swap priority in Linux? Can I use 2 swap partition at the same time? 如何在Linux中设置交换优先级? 我可以同时使用2个交换分区吗? You can set the priority of swap in ...

    linux中设置线程优先级

    How to set swap priority in Linux? Can I use 2 swap partition at the same time?

    如何在Linux中设置交换优先级? 我可以同时使用2个交换分区吗?

    You can set the priority of swap in Linux by swapon.

    您可以通过swaponLinux中设置交换的优先级。

    For example, to set /dev/sdc1‘s priority to 0:

    例如,将/dev/sdc1的优先级设置为0:

    # swapoff /dev/sdc1; swapon -p 0 /dev/sdc1

    You can also put one entry into the /etc/fstab to make it take effect each time Linux reboots:

    您还可以在/etc/ fstab放入一个条目,以使其在每次Linux重新启动时生效:

    /dev/sdc1 swap swap pri=0 0 0

    You can set 2 swap partions to have the same priority, pages are allocated on a round-robin basis between them.

    您可以将2个交换分区设置为具有相同的优先级,页面在它们之间以循环方式分配。

    Priority

    优先

    Each swap area has a priority, either high or low. The default
    priority is low. Within the low-priority areas, newer areas are even
    lower priority than older areas. All priorities set with swapflags are
    high-priority, higher than default. They may have any non-negative
    value chosen by the caller. Higher numbers mean higher priority.

    每个交换区域都有一个高优先级或低优先级。 默认值
    优先级低。 在低优先级区域中,较新的区域甚至
    优先级低于较老地区。 所有带有swapflags设置的优先级为
    高优先级,高于默认值。 他们可能有任何非负数
    呼叫者选择的值。 数字越高意味着优先级越高。

    Swap pages are allocated from areas in priority order, highest
    priority first. For areas with different priorities, a higher-priority
    area is exhausted before using a lower-priority area. If two or more
    areas have the same priority, and it is the highest priority
    available, pages are allocated on a round-robin basis between them.

    交换页面是按优先级从高到低的顺序分配的
    优先优先。 对于优先级不同的区域,优先级较高
    使用较低优先级的区域之前,该区域已耗尽。 如果两个或更多
    区域具有相同的优先级,这是最高优先级
    如果可用,页面将在它们之间以循环方式分配。

    As of Linux 1.3.6, the kernel usually follows these rules, but there
    are exceptions.

    从Linux 1.3.6开始,内核通常遵循以下规则,但是
    是例外。

    From swapon manual.

    swapon手册。

    翻译自: https://www.systutorials.com/how-to-set-swap-priority-in-linux/

    linux中设置线程优先级

    展开全文
  • C#.net异步Task,如何设置线程优先级
  • 设置线程优先级的函数: int pthread_setschedparam(pthread_t target_thread, int policy, const struct sched_param *param) 它主要用于设置线程的调用策略和优先级。 参数说明: 1. target_thread是使用...
  • linux 下设置线程优先级

    千次阅读 2019-09-12 11:14:45
    linux 下设置线程优先级 原文链接:http://www.cnblogs.com/xiaotlili/p/3510224.html root@ubuntu:tmp# cat test2.c #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <...
  • 如何设置线程优先级

    千次阅读 2018-03-06 18:15:45
    1.创建线程时的参数中,含有设置优先级的参数,设置进去即可 例子: AfxBeginThread(Thread****, this, THREAD_PRIORITY_TIME_CRITICAL); 2.设置进程的优先级 线程优先级与进程有关,如果进程的优先级最高,那么...
  • /** * Created by yys on 2017/9/20. * 测试 Thread setPriority方法 * 设置线程优先级 * 输出为 T1 : 7488 T1 : 7489 ---T2 : 5 T1 : 7490 T1 : 7491 */ public class TestPriority { pu
  • Android中设置线程优先级方法

    千次阅读 2019-09-04 10:15:10
    有时候,我们会创建一个线程去操作一个比较耗时的任务,同时它的优先级不需要很高,不能应用这个耗时的工作线程,影响了整机的性能,那么我们可以...THREAD_PRIORITY_DEFAULT,默认的线程优先级,值为0。 THREAD_...
  • /* * Java是如何对线程进行调用呢? * 线程有两种调度模型: * 分时调度模型 : * 所有线程轮流使用CPU的使用权, * 平均分配每个线程的占用CPU的时间 ... * 优先让优先级高的线程使用CPU,如果线程优先级 *
  • * 我们的线程没有设置优先级,肯定有默认优先级。 * 那么,默认优先级是多少呢? * 如何获取线程对象的优先级? * public final int getPriority():返回线程对象的优先级。 * 如何设置线程对象的优先级呢? * ...
  • package test39;/*** * 线程调度 CPU在某一个时刻只能执行一条指令,线程只有得到CPU时间片,也就是使用权,才可以执行... * 优先让优先级高的线程使用CPU,如果线程优先级相同,那么会随机选择一个,优先级高的线
  • setDaemon(true),设置一个线程为守护线程,该线程不会单独执行,当其他非守护线程都执行结束后,自动退出。
  • 一: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设置线程优先级的误区

    千次阅读 2018-11-23 21:23:57
    线程有一些了解的读者知道,在线程中,我们可以通过线程的setPriority()方法来设置线程优先级,方法的参数是一个整型值,可以填写从1~10的值。当我们创建线程的时候,java默认给线程设置优先级是5,1为最低...
  • 在linux下我们可以通过 int pthread_create(pthread_t *thread, const pthread_...来创建线程,但是如何设置线程优先级呢? 在讨论这个问题的时候,我们先要确定当前线程使用的调度策略,posix提供了 int pthread_a
  • int threadFunc(void* func) { pid_t tid = androidGetTid(); androidSetThreadPriority(tid, ANDROID_PRIORITY_AUDIO); ...通过上面的代码可以设置framework层C++的线程 优先级。参考:Audio...
  • ceSetThreadPriority 一直採用SetThreadPriority,结果今天发帖询问线程时间问题,才突然顿悟。。。发现SetThreadPriority只设置248-255,也就是说...我就说我的线程设置优先级怎么没什么用。。。。。。NYYD...
  • #include
  • 1. android.os.Process.setThreadPriority (int priority或android.os.Process.setThreadPriority (int tid, int priority)  priority:【-20, 19】,高优先级 -> 低优先级.
  • sched_setscheduler() 函数设置指定pid线程的调度策略和参数,如果pid = 0, 则设置调用该函数的线程的策略和参数; SCHED_OTHER 标准循环和分时策略; SCHED_BATCH for “batch” style execution of processes; ...
  • unix设置线程优先级

    千次阅读 2008-05-08 11:06:00
    如何在linux/unix中设置线程优先级int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);来创建线程,但是如何设置线程优先级呢?在讨论这个问题的...
  • Android提供了两种方法,让我们可以实现线程优先级设置。 我们无法控制进程,但是可以控制进程中的线程的优先级。 两种方法 Thread.setPriority(Thread.XXXXX_PRIORITY); android.os.Process.setThreadPri...
  • ... public class ThreadPriority extends Thread { ... // 设置正确的线程优先级 tp1.setPriority(10); tp2.setPriority(1); tp1.start(); tp2.start(); tp3.start(); } }
  • -- 线程--> <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <!-- 核心线程数 --> <property name="...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 277,170
精华内容 110,868
关键字:

怎么设置线程的优先级