Thread クラス

スレッドを作成および制御し、そのスレッドの優先順位の設定およびステータスの取得を行います。

この型のすべてのメンバの一覧については、Thread メンバ を参照してください。

System.Object
   System.Threading.Thread

NotInheritable Public Class Thread
[C#]
public sealed class Thread
[C++]
public __gc __sealed class Thread
[JScript]
public class Thread

スレッドセーフ

この型は、マルチスレッド操作に対して安全です。

解説

プロセスは、そのプロセスに関連付けられたプログラム コードの一部を実行する 1 つ以上のスレッドを作成できます。スレッドで実行されるプログラム コードを指定するには、 ThreadStart デリゲートを使用します。

スレッドは、存在している間は常に、 ThreadState で 1 つ以上定義した状態を保ちます。スレッドに対しては、 ThreadPriority で定義したスケジューリング優先順位を要求できますが、その優先順位がオペレーティング システムで有効であるかどうかは保証されません。

GetHashCode を使用すると、マネージ スレッドの識別子の値を取得できます。スレッドの有効期間の間は、この値の取得元のアプリケーション ドメインに関係なく、他のスレッドの値と衝突することはありません。

メモ   オペレーティング システムの ThreadId は、マネージ スレッドとの固定的な関係を一切持ちません。アンマネージ ホストは、マネージ スレッドとアンマネージ スレッドの関係を制御できるためです。たとえば、高度なホストでは、CLR Hosting API を使用して、同一のオペレーティング システム スレッドに対して複数のマネージ スレッドをスケジュールしたり、1 つのマネージ スレッドを複数のオペレーティング システム スレッド間で移動させたりすることができます。

使用例

[Visual Basic, C#, C++] 単純なスレッド機能を示すコード例を次に示します。

 
Imports System
Imports System.Threading

' Simple threading scenario:  Start a Shared method running
' on a second thread.
Public Class ThreadExample
    ' The ThreadProc method is called when the thread starts.
    ' It loops ten times, writing to the console and yielding 
    ' the rest of its time slice each time, and then ends.
    Public Shared Sub ThreadProc()
        Dim i As Integer
        For i = 0 To 9
            Console.WriteLine("ThreadProc: {0}", i)
            ' Yield the rest of the time slice.
            Thread.Sleep(0)
        Next
    End Sub

    Public Shared Sub Main()
        Console.WriteLine("Main thread: Start a second thread.")
        ' The constructor for the Thread class requires a ThreadStart 
        ' delegate.  The Visual Basic AddressOf operator creates this
        ' delegate for you.
        Dim t As New Thread(AddressOf ThreadProc)
        ' Start ThreadProc.  On a uniprocessor, the thread does not get 
        ' any processor time until the main thread yields.  Uncomment 
        ' the Thread.Sleep that follows t.Start() to see the difference.
        t.Start()
        'Thread.Sleep(0)

        Dim i As Integer
        For i = 1 To 4
            Console.WriteLine("Main thread: Do some work.")
            Thread.Sleep(0)
        Next

        Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.")
        t.Join()
        Console.WriteLine("Main thread: ThreadProc.Join has returned.  Press Enter to end program.")
        Console.ReadLine()
    End Sub
End Class

[C#] 
using System;
using System.Threading;

// Simple threading scenario:  Start a static method running
// on a second thread.
public class ThreadExample {
    // The ThreadProc method is called when the thread starts.
    // It loops ten times, writing to the console and yielding 
    // the rest of its time slice each time, and then ends.
    public static void ThreadProc() {
        for (int i = 0; i < 10; i++) {
            Console.WriteLine("ThreadProc: {0}", i);
            // Yield the rest of the time slice.
            Thread.Sleep(0);
        }
    }

    public static void Main() {
        Console.WriteLine("Main thread: Start a second thread.");
        // The constructor for the Thread class requires a ThreadStart 
        // delegate that represents the method to be executed on the 
        // thread.  C# simplifies the creation of this delegate.
        Thread t = new Thread(new ThreadStart(ThreadProc));
        // Start ThreadProc.  On a uniprocessor, the thread does not get 
        // any processor time until the main thread yields.  Uncomment 
        // the Thread.Sleep that follows t.Start() to see the difference.
        t.Start();
        //Thread.Sleep(0);

        for (int i = 0; i < 4; i++) {
            Console.WriteLine("Main thread: Do some work.");
            Thread.Sleep(0);
        }

        Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
        t.Join();
        Console.WriteLine("Main thread: ThreadProc.Join has returned.  Press Enter to end program.");
        Console.ReadLine();
    }
}

[C++] 

// [C++]
// Compile using /clr option.
#using <mscorlib.dll>
 using namespace System;
 using namespace System::Threading;
 // Simple threading scenario:  Start a Shared method running
 // on a second thread.
 public __gc class ThreadExample 
 {
 public:
     // The ThreadProc method is called when the thread starts.
     // It loops ten times, writing to the console and yielding 
     // the rest of its time slice each time, and then ends.
     static void ThreadProc()
     {
         for (int i = 0; i < 10; i++) 
         {
             Console::Write("ThreadProc: ");
             Console::WriteLine(i);
             // Yield the rest of the time slice.
             Thread::Sleep(0);
         }
     }
 };
 
 int main() 
 {
     Console::WriteLine(S"Main thread: Start a second thread.");
     // Create the thread, passing a ThreadStart delegate that
     // represents the ThreadExample::ThreadProc method.  For a 
     // delegate representing a static method, no object is
     // required.
     Thread *oThread = new Thread(new ThreadStart(0, &ThreadExample::ThreadProc));
 
     // Start the thread.  On a uniprocessor, the thread does not get 
     // any processor time until the main thread yields.  Uncomment
     // the Thread.Sleep that follows t.Start() to see the difference.
     oThread->Start();
     //Thread::Sleep(0);

     for (int i = 0; i < 4; i++) {
         Console::WriteLine("Main thread: Do some work.");
         Thread::Sleep(0);
     }

     Console::WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
     oThread->Join();
     Console::WriteLine("Main thread: ThreadProc.Join has returned.  Press Enter to end program.");
     Console::ReadLine();
     return 0;
 }

[Visual Basic, C#, C++] このコードによって、次のような出力が生成されます。

[VB, C++, C#]
Main thread: Start a second thread.
Main thread: Do some work.
ThreadProc: 0
Main thread: Do some work.
ThreadProc: 1
Main thread: Do some work.
ThreadProc: 2
Main thread: Do some work.
ThreadProc: 3
Main thread: Call Join(), to wait until ThreadProc ends.
ThreadProc: 4
ThreadProc: 5
ThreadProc: 6
ThreadProc: 7
ThreadProc: 8
ThreadProc: 9
Main thread: ThreadProc.Join has returned.  Press Enter to end program.

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Threading

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

Thread メンバ | System.Threading 名前空間 | スレッドおよびスレッド処理 | スレッドの使用とスレッド処理