ノートからの抜粋:https://www.cnblogs.com/zhili/archive/2012/07/18/Thread.html、その後の検索のための記録について学びます。
のスレッドを紹介
プロセス(プロセス)は、アプリケーションのリソースインスタンスのコレクションは、アプリケーションが他のアプリケーションによって影響されないことを確実にするために、その過程で、各アプリケーションの実行に使用されます。
スレッドは、プロセスが複数のスレッドを含むことができ、基本的な処理実行部です。プロセスのメインスレッドであるスレッドを実行するプロセスの最初のエントリ、.NETアプリケーションは、番組エントリ(プロセス・スレッドは、実行ユニット、プロセスは、コンテナ・スレッドである)のようなmain()メソッドに基づいています。
第二に、スレッドのスケジューリングと優先順位
スレッドはいつでも横取りし、別のスレッドをスケジュールすることができますので、Windowsは、プリエンプティブマルチスレッド・オペレーティング・システムとして知られています。
各スレッドは、CPUを実行するための0から31に割り当てられた優先順位、高優先度スレッド・システムの最初に割り当てられます。
Windows 7のサポート相対スレッドの優先度:アイドル、最低、ノーマル、ノーマル、上記通常、最高とタイムクリティカルの下。通常のデフォルトのスレッドの優先順位である、しかし、プログラム中のスレッド優先プロパティを設定して、スレッドの優先順位を変更することができ、
これは、型ThreadPriority列挙型は次のとおりです。最低、BelowNormal、通常、AboveNormalと最高、CLRと自分自身のためにアイドルタイムクリティカルな優先順位を保持しています。
列挙値の一覧は以下の通り:
メンバー名 | 説明 |
最低 | スレッドは、他の優先度のスレッドの後ろに配置することができます。 |
BelowNormal | スレッドを配置することができます通常の優先度のスレッドの後に最も低い優先度スレッドの前に。 |
ノーマル | スレッドを配置することができAboveNormal優先スレッド後BelowNormal優先スレッドの前に。 デフォルトでは、スレッドが中に配置され、通常の優先順位。 |
AboveNormal | スレッドを置くことができる最高の優先度のスレッドの後に通常の優先度のスレッドの前に。 |
最高 | スレッドは、他の優先度のスレッドの前に配置することができます。 |
第三に、フォアグラウンドスレッドとバックグラウンドスレッド
.NETのスレッドがフォアグラウンドとバックグラウンドスレッドスレッドに分かれています。
I、メインスレッドは、あなたがスレッド、子スレッドにメインスレッドを作成したスレッドを作成する必要がある場合、それはフォアグラウンドスレッドで、ときに、プログラムが開始され実行されます。
II、サブスレッドは、フォアグラウンドスレッドはまた、バックグラウンドスレッドであり得ることができます。
III、フォアグラウンドスレッドは、すべてのプロセスがまだ生きている、メインスレッドが閉鎖されている場合でも、実行しなければなりません。
すべてのフォアグラウンドスレッドが実行を停止するIV、CLRは任意のバックグラウンドスレッドの終了を強制しますが、まだ実行されているこれらのバックグラウンドスレッドは直接終了し、例外はスローされません。
Vは、唯一の違いの前景と背景のスレッドは、プロセス終了をブロックしないバックグラウンドスレッドであるスレッド、フォアグラウンドスレッドはいつでもバックグラウンドスレッドに変更することができます。
/// <要約> /// フォアグラウンドスレッドとバックグラウンドスレッド /// </要約> プライベート 静的 無効ThreadType() { // (デフォルトはフォアグラウンドスレッドで)新しいスレッドを作成する スレッドbackThread = 新しい新しいスレッド(労働者) { / / スレッドバックグラウンドスレッド変更 IsBackground =をtrueに }; // 開始メソッドを介してスレッドを開始 backThread.Start(); // アプリケーションが終了された5秒後backThreadは、フォアグラウンドスレッドである場合。 // もしbackThreadバックグラウンドスレッドでは、アプリケーションがすぐに終了します。 Console.WriteLineを(「それはメインのスレッドです。」); // Console.Read(); } プライベート 静的 ボイドワーカー() { // 休息5秒 のThread.sleep(5000 ); Console.WriteLineを(「これは、ワーカースレッドからです。」); }
あなたは真= IsBackgroundを保つ提供;しかし、労働者()メソッドを継続したい、あなたが達成するためにthread.Join()メソッドを呼び出すことができます。メインスレッド(フォアグラウンドスレッドが)非同期スレッドスレッド(バックグラウンドスレッド)の実行が終了するまで実行されないことを確実にするために()メソッドに参加。
静的 ボイドメイン(文字列[]引数) { ThreadTypeUseJoin(); } /// <まとめ> /// 参加()メソッドを使用して、バックグラウンドスレッドとフォアグラウンド・スレッド /// メインスレッド(フォアグラウンドスレッド)ことを確実にするために参加()メソッドをスレッド終了(バックグラウンドスレッド)の実行が実行されます後、非同期スレッド /// </要約> プライベート 静的 無効ThreadTypeUseJoin() { // (デフォルトはフォアグラウンドスレッドで)新しいスレッドを作成する スレッドbackThread = 新しい新しいスレッド(ワーカー)を { // スレッドをバックグラウンドスレッド変更 IsBackground = trueにする }; //は、開始メソッドを介してスレッドを開始 backThread.Start(); backThread.Join(); Console.WriteLineを(「これは、メインスレッドからです。」); Console.Read(); } プライベート 静的 ボイドワーカー() { // 休息5秒 のThread.sleep(5000 ); Console.WriteLineを(「これは、ワーカースレッドからです。」); }
結果は以下の通りであります:
4つの簡単なスレッドを使用してください
実際には、上記の説明の前景と背景スレッドでスレッドがThreadStartを通過したときにスレッドを作成するために委託し、この時間は、マルチスレッドのプロセスを達成しています。
以下のことでParameterizedThreadStartをマルチスレッドアプローチのデリゲートを達成するために:
静的 ボイドメイン(文字列[]引数) { (ThreadTypeUseParameterized); } /// <まとめ> /// バックグラウンドスレッド(ParameterizedThreadStartデリゲートは、マルチスレッドを使用する)と前景スレッド /// </要約> プライベート 静的 ボイドThreadTypeUseParameterized() { // (デフォルトはフォアグラウンドスレッドである)新しいスレッドを作成する スレッドbackThread = 新しい新しいスレッド(新しい新しいParameterizedThreadStart(worker1を)); // 開始メソッドを介してスレッドを開始する backThread.Start(123 ); // backThreadフォアグラウンドスレッドがある場合、アプリケーションが終了した後、5秒。 // もしbackThreadバックグラウンドスレッドでは、アプリケーションがすぐに終了します。 Console.WriteLineを(" それはメインのスレッドをAPOS。" ); } プライベート 静的 無効 worker1(オブジェクトパラメータ) { // 5秒休む のThread.sleep(5000 ); Console.WriteLineを(パラメータ +は、 " スレッドからworker1されています。" ); Console.Read(); }
結果は以下の通りであります: