アプリを実行しているスレッドIDとスレッド名

投稿日:  更新日:

Androidアプリを実行しているスレッドIDとスレッド名をプログラムで調べる方法を紹介します。

スポンサーリンク

スレッドとは

プログラム(Androidのアプリ)はプロセスの中で実行されます。

この時、プログラムの実行に割り当てられるCPUリソースの単位がスレッドです。

プログラムは1つ以上のスレッドで実行されます。スレッド1つの場合をシングルスレッド、スレッド2つ以上の場合をマルチスレッドといいます。

各々のスレッドは個別にプログラムポインター(プログラム上の実行している位置)を持っていて、プログラム中の異なった位置を並列に実行しているかのように処理されます。

※プロセスについては「アプリを実行しているプロセスIDとプロセス名」を参照してください。

スポンサーリンク

スレッドIDとスレッド名を調べるプログラム

スレッドIDとスレッド名を調べるプログラムは次のようになります。

KotlinJava
class SysInfo {

    companion object Utility {

        fun logThread(tag: String): Unit {
            val threadName = Thread.currentThread().name
            val threadId = Thread.currentThread().id
            Log.i(tag, "Thread  = %s(%d)".format(threadName, threadId))
        }
    }
}
public class SysInfo {

    public static void logThread(String tag) {
        String _ThreadName = Thread.currentThread().getName();
        long _ThreadId = Thread.currentThread().getId();
        Log.i(tag, String.format("Thread  = %s(%d)", _ThreadName, _ThreadId));
    }
}

スレッドIDとスレッド名はThreadのインスタンスが持っています。自身を実行しているスレッドのインスタンスはThreadクラスから取得できます。

プログラムの実行結果は次のようになりました。

KotlinJava
package com.example.android.myapp
...
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
		...
        // --- スレッド確認
        logThread("Main")

        Thread{ logThread("Th_1") }.start()  // 名前はシステムが付ける
		
        Thread(
            Runnable{ logThread("Th_2") },
            "hoge"
        ).start()
    }
}


※2、3番目のThreadは引数がSAM変換されています。
※3番目のThreadは2つの引数を取るため”()”が省略できません。

package com.example.android.myapp
...
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
		...
        // --- スレッド確認
        logThread("Main")

        new Thread(new Runnable() {  // 自動で名前が付けられる
            @Override
            public void run() {
                logThread("Th_1");
            }
        }).start();
		
		new Thread(new Runnable() {
            @Override
            public void run() {
                logThread("Th_2");
            }
        }, "hoge").start();
    }
}
I/Main: Thread  = main(1)
I/Th_1: Thread  = Thread-2(1561)
I/Th_2: Thread  = hoge(1562)

名前を指定しないでスレッドを起動すると、システムにより自動で名前が付けられます。

スポンサーリンク

関連記事:

Androidアプリを実行しているプロセスIDとプロセス名をプログラムで調べる方法を紹介します。 ...
Android OSはマルチユーザーのOSです。 マルチユーザーとは一台の携帯端末を複数のユーザーで切り替えて使うことです。 マルチユーザーについてまとめます。 ...
スポンサーリンク