C#のThreadクラスとは?主要なプロパティとメソッドを徹底解説
C#のThreadクラスの基本
スレッド(Thread)は、軽量なプロセスとして知られています。最も一般的な使用例としては、現代のオペレーティングシステムにおける並行プログラミング(Concurrent Programming)の実装が挙げられます。
C#では System.Threading.Thread クラスを使うことで、スレッドの生成・制御・状態管理を行うことができます。この記事では、Threadクラスが提供する主要なプロパティとメソッドについて詳しく解説します。
Threadクラスの主なプロパティ
以下は、Threadクラスでよく使われる代表的なプロパティの一覧です。
| No. | プロパティと説明 |
|---|---|
| 1 | CurrentContext スレッドが現在実行されているコンテキストを取得します。 |
| 2 | CurrentCulture 現在のスレッドのカルチャ(文化情報)を取得または設定します。 |
| 3 | CurrentPrincipal スレッドの現在のプリンシパル(ロールベースのセキュリティ用)を取得または設定します。 |
| 4 | CurrentThread 現在実行中のスレッドを取得します。 |
| 5 | CurrentUICulture リソースマネージャーが、実行時にカルチャ固有のリソースを検索する際に使用する現在のカルチャを取得または設定します。 |
| 6 | ExecutionContext 現在のスレッドに関するさまざまなコンテキスト情報を含む、 ExecutionContext オブジェクトを取得します。 |
| 7 | IsAlive 現在のスレッドの実行状態を示す値を取得します。 |
| 8 | IsBackground そのスレッドがバックグラウンドスレッドであるかどうかを示す値を取得または設定します。 |
Threadクラスの主なメソッド
続いて、Threadクラスが提供する代表的なメソッドを見ていきましょう。
| No. | メソッドと説明 |
|---|---|
| 1 | public void Abort() 呼び出し対象のスレッドに対して ThreadAbortException を発生させ、スレッドの終了処理を開始します。通常、このメソッドを呼び出すとスレッドは終了します。※なお、.NET 5以降では廃止(非推奨)となっており、代わりに CancellationToken の利用が推奨されています。 |
| 2 | public static LocalDataStoreSlot AllocateDataSlot() すべてのスレッドに対して、名前のないデータスロットを割り当てます。より高いパフォーマンスが必要な場合は、 ThreadStaticAttribute 属性を付けたフィールドを使用することが推奨されます。 |
| 3 | public static LocalDataStoreSlot AllocateNamedDataSlot(string name) すべてのスレッドに対して、指定した名前のデータスロットを割り当てます。こちらもパフォーマンス向上のためには、 ThreadStaticAttribute 属性を付けたフィールドの使用が推奨されます。 |
| 4 | public static void BeginCriticalRegion() 実行がクリティカル領域に入ろうとしていることをホストに通知します。この領域内では、スレッドの中断や未処理の例外が、アプリケーションドメイン内の他のタスクに悪影響を及ぼす可能性があります。 |
| 5 | public static void BeginThreadAffinity() マネージドコードが、現在の物理的なOSスレッドの識別情報に依存する命令を実行しようとしていることをホストに通知します。 |
| 6 | public static void EndCriticalRegion() 実行がクリティカル領域に入ろうとしていることをホストに通知します。この領域内では、スレッドの中断や未処理の例外による影響は、現在のタスクのみに限定されます。 |
| 7 | public static void EndThreadAffinity() マネージドコードが、現在の物理的なOSスレッドの識別情報に依存する命令の実行を完了したことをホストに通知します。 |
まとめ
Threadクラスは、C#におけるマルチスレッドプログラミングの中核となるクラスです。プロパティを使えばスレッドの状態やカルチャ情報を管理でき、メソッドを使えばスレッドの制御やホストへの通知を行えます。
ただし、近年の.NETでは Task や async/await を使った非同期処理が主流となっているため、新規開発では用途に応じて適切な手法を選択することが重要です。
-
【Java 9】Optionalクラスに追加された3つの新メソッド(or / ifPresentOrElse / stream)を解説
Optionalクラスは、null以外の値を保持しているかもしれないし、保持していないかもしれない——そんな状態を表現できるコンテナを提供します。このクラスはJava 8で導入され、コード中でNullPointerExceptionが発生しうる箇所を減らすことを目的としています。さらにJava 9では、デフォルト値の扱いをより柔軟にするための3つの新メソッド、or()、ifPresentOrElse()、stream()が追加されました。 Optional.or() or()メソッドはJava 9で導入され、引数として関数型インターフェースのSupplierを受け取ります。このメソッドは常に
-
Javaのクラスメソッド(静的メソッド)とは?基本から使い方まで解説
Javaにおけるクラスメソッド(静的メソッド)とは、特定のオブジェクトのインスタンスではなく、クラスそのものに対して呼び出されるメソッドのことです。static修飾子を付けることで、すべてのクラスインスタンス間で同じ実装が保証されます。静的メソッドはインスタンス化せずに呼び出すことができるため、アクセスできるのはクラス内の他の静的メンバー(staticなフィールドやメソッド)のみです。インスタンス変数や非staticメソッドには直接アクセスできない点に注意しましょう。Javaの標準ライブラリにも多くの静的メソッドが用意されています。代表的な例としては、Math.random()、System.