Javaスレッドは、スレッドメソッドを作成するためにスレッドクラスを使用して

1 Star2 Stars3 Stars4 Stars5 Stars (まだ評価されていません)
Loading...

Javaでスレッドを作成するには、Threadクラスを使用し、Runnableインターフェイスを使用する2つの方法があります。 Runnableインタフェースを使用する場合は、Threadインスタンスを作成する必要があります。 したがって、ThreadクラスまたはRunnableインターフェイスを通じてスレッドを作成するにしても、Threadクラスまたはそのサブクラスのインスタンスを作成する必要があります。 Threadクラスのコンストラクタは8回オーバーロードされています。コンストラクタは次のとおりです。
コードを次のようにコピーします。
パブリックスレッド();
パブリックスレッド(Runnableターゲット);
パブリックスレッド(文字列名);
パブリックスレッド(Runnable target、String name);
パブリックスレッド(ThreadGroupグループ、Runnableターゲット);
パブリックスレッド(ThreadGroupグループ、文字列名);
パブリックスレッド(ThreadGroupグループ、Runnableターゲット、文字列名);
パブリックスレッド(ThreadGroupグループ、Runnableターゲット、文字列名、long stackSize);

実行可能なターゲット

Runnableインタフェースを実装するクラスのインスタンスです。 ThreadクラスはRunnableインタフェースも実装しているため、Threadクラスから継承したクラスのインスタンスもターゲットとしてこのコンストラクタに渡すことができます。

文字列名

スレッドの名前。 この名前は、Threadインスタンスが作成された後のThreadクラスのsetNameメソッドによって設定できます。 スレッドの名前を設定しない場合、スレッドはデフォルトのスレッド名:Thread-Nを使用します.Nはスレッドが作成された順番であり、繰り返し不可能な正の整数です。

ThreadGroupグループ

現在確立されているスレッドが属するスレッドグループ。 スレッドグループを指定しないと、すべてのスレッドがデフォルトのスレッドグループに追加されます。 スレッドグループの詳細については、後の章で詳しく説明します。

長いスタックサイズ

スレッドスタックのサイズ。通常、CPUページの整数倍です。 たとえば、x86ページサイズは4KBです。x86プラットフォームでは、デフォルトのスレッドスタックサイズは12KBです。

通常のJavaクラスは、Threadクラスから継承している限り、スレッドクラスにすることができます。 スレッドコードは、Threadクラスのstartメソッドで実行できます。 Threadクラスのサブクラスは直接インスタンス化できますが、実際にスレッドのコードを実行するには、Threadクラスのrunメソッドをオーバーライドする必要があります。 次のコードは、Threadクラスを使用してスレッドを作成する例を示しています。
コードを次のようにコピーします。
パッケージmythread;

パブリッククラスThread1はスレッドを拡張します。
{
public void run()
{
System.out.println(this.getName());
}
パブリック静的void main(String [] args)
{
System.out.println(Thread.currentThread()。getName());
スレッド1のスレッド1 =新しいスレッド1();
スレッド1のスレッド2 =新しいスレッド1();
Thread1.start();
Thread2.start();
}
}

上記のコードは、thread1とthread2という2つのスレッドを作成します。上記のコードの中の005〜008行目は、Thread1クラスのrunメソッドです。 行014と015でstartメソッドが呼び出されると、システムは自動的にrunメソッドを呼び出します。 007では、this.getName()は現在のスレッドの名前を出力するために使用されます。スレッドが作成されたときにスレッド名が指定されていないため、出力スレッド名はシステムのデフォルト値です。 メインスレッドのスレッド名は、011行目に出力されます。

上記のコードは次のように実行されます:
コードを次のようにコピーします。
メイン
スレッド0
スレッド1

上記の出力から、最初の行のメイン出力がメインスレッドの名前であることがわかります。 次のスレッド1とスレッド2はそれぞれスレッド1とスレッド2の出力です。

注:Javaプログラムにはメインスレッドが必要です。 一般的に、このメインスレッドの名前はmainです。プログラム内に別のスレッドが作成された場合にのみ、真にマルチスレッドプログラムとなります。 つまり、マルチスレッドプログラムには複数のスレッドが必要です。

Threadクラスには、スレッド名を設定するオーバーロードされたコンストラクタがあります。 スレッドの作成時にコンストラクタを使用してスレッド名を設定することに加えて、ThreadクラスのsetNameメソッドを使用してスレッド名を変更することができます。 Threadクラスのコンストラクタでスレッド名を設定するには、Threadクラスのpublic Thread(String name)コンストラクタをThreadのサブクラスで使用する必要があります。したがって、Threadのサブクラスに入ってくるスレッドのスレッドを追加する必要があります。名前のコンストラクタです。 次のコードは、スレッド名の設定例を示しています。
コードを次のようにコピーします。
パッケージmythread;

パブリッククラスThread2はスレッドを拡張します
{
プライベートストリングwho;

public void run()
{
System.out.println(who + ":" + this.getName());
}
公開スレッド2(String who)
{
スーパー();
これはwho = who;
}
パブリックスレッド2(String who、String name)
{
スーパー(名前);
これはwho = who;
}
パブリック静的void main(String [] args)
{
スレッド2のスレッド1 =新しいスレッド2( "スレッド1"、 "MyThread1");
スレッド2のスレッド2 =新しいスレッド2( "スレッド2");
スレッド2のスレッド3 =新しいスレッド2( "スレッド3");
thread2.setName( "MyThread2");
Thread1.start();
Thread2.start();
Thread3.start();
}

クラスには2つのコンストラクタがあります:

ライン011:public sample2_2(String who)

このコンストラクタは1つの引数をとります:who。このパラメータは、現在作成されているスレッドを識別するために使用されます。 このコンストラクタでは、Threadのデフォルトのコンストラクタpublic Thread()が引き続き呼び出されます。

行016:public sample2_2(String who、String name)

このコンストラクタ内のwhoは、最初のコンストラクタのwhoと同じ意味を持ち、nameパラメータはスレッドの名前です。 このコンストラクタでは、スレッドクラスのpublic Thread(String name)コンストラクタが呼び出されます。これは、行018のスーパー(名前)です。

メインメソッドでは、スレッド1、スレッド2、スレッド3の3つのスレッドが作成されます。thread1はコンストラクターメソッドを介してスレッド名を設定し、thread2はsetNameメソッドによってスレッド名を変更し、thread3はスレッド名を設定しません。

結果は次のとおりです。
コードを次のようにコピーします。
スレッド1:MyThread1
スレッド2:MyThread2
スレッド3:スレッド2

上記の出力から、thread1とthread2のスレッド名が変更され、thread3のスレッド名が依然としてデフォルト値であることがわかります。Thread-2.thread3のスレッド名はThread-1ではなくThread-2です。これは、02行目にthread2が作成されたときに既にスレッド1が占有されているためです。したがって、thread3が025行目に作成されると、thread3のスレッド名はThread-2に設定され、026行目でthread2のスレッド名がMyThread2。上記の出力が得られます。

注意:setNameを使用すると、startメソッドの呼び出し前後でスレッド名を設定できますが、startメソッドを呼び出した後にsetNameを使用してスレッド名を変更すると、不確定性が発生し、runメソッドが実行されるまでsetNameが実行されない可能性があります。 runメソッドでスレッド名を使用すると、setNameメソッドが呼び出されてもスレッド名が変更されないという現象が発生します。

Threadクラスのstartメソッドは複数回呼び出すことはできません。たとえば、thread1.start()メソッドを2回呼び出すことはできません。 それ以外の場合は、IllegalThreadStateExceptionがスローされます。


1 Star2 Stars3 Stars4 Stars5 Stars (まだ評価されていません)
Loading...
      この投稿は審査処理中  | 元のサイトへ