1. ホーム
  2. android

Thread.setPriority()とandroid.os.Process.setThreadPriority()の違いは何ですか?

2023-10-19 14:12:07

質問

もし私が以下のようなコードを持っていたら。

Runnable r = ...;

Thread  thread = new Thread(r);
thread.setPriority((Thread.MAX_PRIORITY + Thread.NORM_PRIORITY) / 2);

または ...

    Runnable r = ...
    Thread thread = new Thread( new Runnable() {
       public void run() {
         android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_MORE_FAVORABLE);
         r.run();
       }
    });

IS android.os.Processの方法は必須ですか、それとも推奨ですか?

WHY は、android.os.Processの方法が好ましい/必要なのでしょうか?

これは、私が知る限り、明確に文書化されていません。

どのように解決するのですか?

現在の Dalvik の実装では、Java スレッドを 1 つずつ、おっしゃるように基礎となる Linux システムの PTHREAD にマッピングしているようです。すべてのアプリのすべてのスレッドはシステム上の同じスレッド グループに属しているため、すべてのスレッドはすべてのアプリのすべてのスレッドと競合します。

そのため、現在 Thread.setPriority と同じことをするはずです。 Process.setThreadPriority と同じことをするはずですが、より小さいJavaの優先度スケールを使っています。優先順位のマッピングは kNiceValues vm/Thread.c