C#のメインスレッドと子スレッドの違いと作成方法を解説
メインスレッドとは
プロセス内で最初に実行されるスレッドをメインスレッドと呼びます。C#プログラムが起動すると、まずこのメインスレッドが自動的に生成され、エントリーポイントであるMain()メソッドから処理が開始されます。
子スレッドとは
Threadクラスを使って新たに作成したスレッドは、メインスレッドに対する子スレッドとして扱われます。子スレッドを活用することで、時間のかかる処理をバックグラウンドで並行して実行でき、アプリケーション全体の応答性を高めることができます。
メインスレッドの取得例
以下は、現在実行中のスレッド(メインスレッド)を取得し、名前を設定して表示するサンプルコードです。
using System;
using System.Threading;
namespace Demo {
class Program {
static void Main(string[] args) {
Thread th = Thread.CurrentThread;
th.Name = "MainThread";
Console.WriteLine("This is {0}", th.Name);
Console.ReadKey();
}
}
}
出力結果
This is MainThread
ポイント解説
Thread.CurrentThreadプロパティを使うことで、現在実行中のスレッド情報を取得できます。ここではNameプロパティに「MainThread」という名前を設定し、コンソールに出力しています。
子スレッドを作成する例
続いて、Threadクラスのインスタンスを生成して子スレッドを作成し、実行する例を紹介します。
using System;
using System.Threading;
namespace Demo {
class Program {
static void Main(string[] args) {
// メインスレッドの名前を設定
Thread main = Thread.CurrentThread;
main.Name = "MainThread";
Console.WriteLine("This is {0}", main.Name);
// 子スレッドを作成して開始
Thread child = new Thread(ChildTask);
child.Name = "ChildThread";
child.Start();
Console.ReadKey();
}
static void ChildTask() {
Console.WriteLine("This is {0}", Thread.CurrentThread.Name);
}
}
}
出力結果
This is MainThread
This is ChildThread
このように、メインスレッドはプログラム起動時に自動的に作成される一方で、子スレッドは開発者が明示的にnew Thread()で生成し、Start()メソッドを呼び出すことで実行されます。マルチスレッドプログラミングを適切に活用すれば、処理の並列化によるパフォーマンス向上が期待できます。
-
C#でスレッドの優先度を表示する方法|Priorityプロパティの使い方
C#でスレッドの優先度を表示するには C#でスレッドの優先度を確認するには、Priorityプロパティを使用します。このプロパティは、OSがスレッドをどの程度の優先順位でスケジューリングするかを示す値を返します。 まず、CurrentThreadプロパティを使って、現在実行中のスレッドの情報を取得します。 Thread thread = Thread.CurrentThread; 次に、thread.Priorityプロパティを参照することで、そのスレッドの優先度を表示できます。 thread.Priority サンプルコード C#でスレッドの優先度を表示する完全なコード例を見てみましょう。
-
Javaでスレッドを安全に終了する方法|volatileフラグを使った実装例
Javaでは、実行中のスレッドを外部から強制的に即座に停止させる安全な手段は用意されていません。かつて提供されていた Thread.stop() メソッドは、スレッドが保持しているロックやデータの整合性を壊す恐れがあるため、現在では非推奨(deprecated)となっています。 そこで推奨されるのが、volatile 修飾子を付けた boolean 型のフラグを使い、スレッド自身に終了タイミングを判断させる方法です。以下に具体的な実装例を示します。 コード例 public class Main{ static volatile boolean exit = false; pu