Javaのスレッドライフサイクル

WBOY
リリース: 2024-08-30 16:19:57
オリジナル
514 人が閲覧しました

スレッドはライフサイクルの中で数多くのフェーズを経験します。たとえば、スレッドが世界に誕生し、開始され、実行され、その後消滅します。次の図は、スレッドの完全なライフサイクルを説明しています。

Javaのスレッドライフサイクル

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

  • スレッド コンストラクターは、新しい状態を通じてスレッドを生成します。
  • Thread で begin メソッドを呼び出すと、実行可能状態を通過できます。
  • Java に関するスレッド スケジューラは、プロセッサがスレッドを受信したときにそのスレッドを実行します。
  • スレッドがブロック状態になると、実行可能な状態に戻るため、再度実行されます。
  • 待機メソッドが参照されている場合、スレッドは待機状態に移行し、Inform メソッドとすべて通知メソッドを通じて通知されるとすぐに実行可能な状態に移行します。
  • run メソッドが終了すると、スレッドも終了します。

スレッドとは何ですか?

スレッドはオペレーティング システム レベルで定義されます。 Java 言語は、他のすべての言語と同様に、オペレーティング システムが提供するサービスを利用します。開発者の観点から見ると、スレッドは、アプリケーションを作成して特定の方法で実行する一連の命令です。アプリケーション自体は複数のスレッドで構成される場合があります。異なるスレッドを同時に実行できます。 JVM (Java 仮想マシン) は複数のスレッドで動作します。ガベージコレクション用のスレッドがあります。 Just in Time Compiler のスレッドとその他の技術的なスレッドがあります。

Java のスレッド ライフサイクルの状態

以下は、Java のスレッド ライフ サイクルのさまざまな状態です。

1. New: 新しいスレッドは、新しい状態内でライフサイクルを開始します。プログラムがスレッドを開始するまでは、この状態が継続します。さらに、これは作成されたスレッドとしても知られています。

2.実行可能: 最近誕生したスレッドが開始できるようになると、スレッドは実行可能になります。この状態のスレッドは、プロセスを実行しているとみなされます。

3.待機中: スレッドが別のスレッドによるアクティビティの実行を待機しているにもかかわらず、スレッドが待機状態に移行することがあります。追加のスレッドが待機スレッドの実行を継続することを示した場合にのみ、スレッドは実行可能状態に移行します。

4.時間指定待機: 実行可能なスレッドは、状態が特定の時間間隔を取得するまでの特定の時間を指定して待機することが簡単にできます。この状態のスレッドは、そのポイント間隔が終了するか、実際に待っているイベントが発生すると、実行可能な状態に戻ります。

5.終了: 実行可能なスレッドは、タスクを完了するか終了するため、終了状態になります。

Java でスレッドを作成するには?

Java でスレッドを作成する最も基本的な方法は、Runnable パターンを使用することです。まず、Runnable インターフェースのインスタンスを作成する必要があります。これは非常に簡単です。実装する方法は 1 つだけです。次に、このインスタンスを Thread クラスのコンストラクターに渡します。次に、作成されたこのスレッド オブジェクトの start() メソッドを呼び出して、Runnable オブジェクトにラップされたタスクを実行する新しいスレッドを起動します。

Javaのスレッドライフサイクル

まず、Runnable のインスタンスを作成します。  実装するメソッドは 1 つだけで、run() メソッドと呼ばれます。これは、匿名クラスのインスタンスを使用してそれを行うための Java 7 パターンです。ただし、Runnable インターフェイスにはメソッドが 1 つしかないため、ラムダ式を使用して Runnable を実装することもできます。

Javaのスレッドライフサイクル

非常に簡単な例についてのスレッドを作成しましょう。

同期すべき非同期コードによる競合状態で何が問題となるかを確認し、同期を使用してコードを修正します。この最初の例は非常に単純です。とても基本的なことです。タスクを作成するだけです。

Javaのスレッドライフサイクル

出力:

Javaのスレッドライフサイクル

タスクは Runnable インターフェイスのインスタンスです。これを runnable と呼びます。このインターフェイスはラムダ式を使用して実装できます。このタスクは新しいスレッドに与えられ、このスレッドのコンテキストで実行されます。したがって、このタスクを実行しているスレッドの名前を出力するだけです。私は…で実行しています。 Thread.currentThread() は、現在のタスクを実行しているスレッドを返す Thread クラスの静的メソッドです。そして、このスレッド オブジェクトで getName() を呼び出してスレッドの名前を返し、その後 Thread インスタンス t = new Thread を作成するだけです。  この実行可能ファイルをパラメータとして渡します。したがって、このスレッドはこのコード部分を実行します。そしてそれを立ち上げること。 t.start() これは、呼び出す必要がある start() メソッドです。 t.setName(“My thread”) を使用して、このスレッドの明示的な名前を指定することもできます。これで、このコードを実行できるようになりました。ここで、call start() メソッドの代わりに run() メソッドを呼び出します。このコードを実行すると、タスクは正しく実行されますが、作成したスレッドでは実行されないという問題が発生します。これは、メイン メソッドを実行するスレッドであるメイン スレッドで実行されます。したがって、新しいスレッドを起動したい場合は、この run() メソッドを呼び出すべきではありません。

Javaのスレッドライフサイクル

出力:

Javaのスレッドライフサイクル

Java のスレッド ライフ サイクルのメソッド

単純に Thread で記述されたメソッドを表に示します。

Data Types Thread Method Names
String

getName()

Return this thread’s name

int get priority()

Returns the thread’s priority

boolean isAlive()

Tests if this thread is still running

void join()

Waits for this thread to die (terminate)

void run()

Whenever this thread was built utilizing an individual Runnable object, which usually Runnable object’s run method is called, this method will do nothing and returns. Whenever thread class can be extended and run() method is over-ridden during sub-class, then an over-ridden run() method is called.

void setName(String name)

Alterations the name with this thread to become comparable to the argument name.

static void

 

 

sleep(long millis) throws Interrupted/Exception
It causes the presently performing thread to rest for
the required quantity of milliseconds.
static void sleep(long millis, int Nanos) throws InterruptedException

It causes the presently performing thread to sleep (cease execution) for the required quantity of milliseconds as well as the particular quantity of nanoseconds.

void start()

Triggers these threads to start execution; the Java Virtual Machine calls the run method of that thread.

static void yield()

Triggers the presently thread object to pause and permit additional threads to execute briefly.

static Thread currentThread()

Returns a mention of the presently executing thread object.

データ型

スレッド メソッド名
    文字列

  • getName()
  • このスレッドの名前を返します

  • int
  • get priority()
  • スレッドの優先度を返します ブール値 isAlive() このスレッドがまだ実行中かどうかをテストします 無効 join() このスレッドが終了する (終了する) まで待機します 無効 run() このスレッドが個々の Runnable オブジェクトを利用して構築されたときは常に、通常は Runnable オブジェクトの run メソッドが呼び出されますが、このメソッドは何もせずに戻ります。スレッド クラスを拡張でき、サブクラス中に run() メソッドがオーバーライドされるたびに、オーバーライドされた run() メソッドが呼び出されます。 無効 setName(文字列名) 引数名と同等になるように、このスレッドの名前を変更します。 静的無効 sleep(長いミリ秒) スロー 中断/例外
    現在実行中のスレッドが
    休止状態になります。 必要なミリ秒単位。 静的ボイド sleep(long millis, int Nanos) throws InterruptedException 現在実行中のスレッドを、必要なミリ秒間および特定のナノ秒間スリープ (実行を停止) させます。 無効 start() これらのスレッドをトリガーして実行を開始します。 Java 仮想マシンはそのスレッドの run メソッドを呼び出します。 静的ボイド yield() 現在のスレッド オブジェクトをトリガーして一時停止し、追加のスレッドが短時間実行できるようにします。 静的スレッド currentThread() 現在実行中のスレッド オブジェクトのメンションを返します。 テーブル> 結論 スレッドの使用を開始するのは簡単ですが、理解するのは非常に困難です。 スレッドセキュアなメソッドを含むクラスを設計するのは困難です。 読み取り: JavaDoc を使用してクラス java.lang.Thread を取得します

    以上がJavaのスレッドライフサイクルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    関連ラベル:
    ソース:php
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート