美文网首页
Android 设置线程优先级

Android 设置线程优先级

作者: zoudaokou2006 | 来源:发表于2016-06-22 15:32 被阅读2651次

    点此查看原文

    设置线程的优先级

    方法一:android.os.Process.setThreadPriority

    android.os.Process.setThreadPriority (int priority);
    android.os.Process.setThreadPriority (int tid, int priority);

    priority:【-20, 19】,高优先级 -> 低优先级。

    方法二:java.lang.Thread.setPriority

    java.lang.Thread.setPriority (int priority)

    priority:【1, 10】,低优先级 -> 高优先级。

    测试后发现,使用方法一(android.os.Process.setThreadPriority )设置优先级,对线程调度影响显著。

    测试代码

    package com.test.testx;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Process;
    import android.util.Log;
    
    public class TestThreadPriority extends Activity {
        private static final String TAG ="TestThreadPriority";
    
        private boolean mNeedExit = false;
    
        @Overridepublic void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            MyThread a = new MyThread("Thread A");
            a.setOSPriority(Process.THREAD_PRIORITY_LOWEST); // 19
            a.setPriority(Thread.MAX_PRIORITY); // 10
    
            MyThread b = new MyThread("Thread B");
            b.setOSPriority(Process.THREAD_PRIORITY_URGENT_AUDIO); // -19
            b.setPriority(Thread.MIN_PRIORITY); // 1
    
            a.start();
            b.start();
        }
    
        @Overridepublic void onBackPressed() {
            mNeedExit = true;
            super.onBackPressed();
        }
    
        private class MyThread extends Thread {
            private int mOSPriority = Process.THREAD_PRIORITY_DEFAULT;
            private int mLoopCount = 0;
    
         public MyThread(String threadName) {
                super(threadName);
         }
    
         public void setOSPriority(int p) {
                mOSPriority = p;
         }
    
        @Overridepublic void run() {
            Process.setThreadPriority(mOSPriority);
    
            while(!mNeedExit) {
                mLoopCount ++;
                Math.log(Math.random() * 1000); // calculation test
    
                Log.d(TAG, new StringBuilder().append(getName())
                        .append(" os priority: ").append(mOSPriority)
                        .append(" java priority: ").append(getPriority())
                        .append(" loop count: ").append(mLoopCount).toString());
                }
    
                Log.d(TAG, new StringBuilder().append(getName()).append(" exiting...")
                        .append(" os priority: ").append(mOSPriority)
                        .append(" java priority: ").append(getPriority())
                        .append(" loop count: ").append(mLoopCount).toString());
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:Android 设置线程优先级

          本文链接:https://www.haomeiwen.com/subject/chcndttx.html