スレッドはライフサイクルの中で数多くのフェーズを経験します。たとえば、スレッドが世界に誕生し、開始され、実行され、その後消滅します。次の図は、スレッドの完全なライフサイクルを説明しています。
無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
スレッドはオペレーティング システム レベルで定義されます。 Java 言語は、他のすべての言語と同様に、オペレーティング システムが提供するサービスを利用します。開発者の観点から見ると、スレッドは、アプリケーションを作成して特定の方法で実行する一連の命令です。アプリケーション自体は複数のスレッドで構成される場合があります。異なるスレッドを同時に実行できます。 JVM (Java 仮想マシン) は複数のスレッドで動作します。ガベージコレクション用のスレッドがあります。 Just in Time Compiler のスレッドとその他の技術的なスレッドがあります。
以下は、Java のスレッド ライフ サイクルのさまざまな状態です。
1. New: 新しいスレッドは、新しい状態内でライフサイクルを開始します。プログラムがスレッドを開始するまでは、この状態が継続します。さらに、これは作成されたスレッドとしても知られています。
2.実行可能: 最近誕生したスレッドが開始できるようになると、スレッドは実行可能になります。この状態のスレッドは、プロセスを実行しているとみなされます。
3.待機中: スレッドが別のスレッドによるアクティビティの実行を待機しているにもかかわらず、スレッドが待機状態に移行することがあります。追加のスレッドが待機スレッドの実行を継続することを示した場合にのみ、スレッドは実行可能状態に移行します。
4.時間指定待機: 実行可能なスレッドは、状態が特定の時間間隔を取得するまでの特定の時間を指定して待機することが簡単にできます。この状態のスレッドは、そのポイント間隔が終了するか、実際に待っているイベントが発生すると、実行可能な状態に戻ります。
5.終了: 実行可能なスレッドは、タスクを完了するか終了するため、終了状態になります。
Java でスレッドを作成する最も基本的な方法は、Runnable パターンを使用することです。まず、Runnable インターフェースのインスタンスを作成する必要があります。これは非常に簡単です。実装する方法は 1 つだけです。次に、このインスタンスを Thread クラスのコンストラクターに渡します。次に、作成されたこのスレッド オブジェクトの start() メソッドを呼び出して、Runnable オブジェクトにラップされたタスクを実行する新しいスレッドを起動します。
まず、Runnable のインスタンスを作成します。 実装するメソッドは 1 つだけで、run() メソッドと呼ばれます。これは、匿名クラスのインスタンスを使用してそれを行うための Java 7 パターンです。ただし、Runnable インターフェイスにはメソッドが 1 つしかないため、ラムダ式を使用して Runnable を実装することもできます。
非常に簡単な例についてのスレッドを作成しましょう。
同期すべき非同期コードによる競合状態で何が問題となるかを確認し、同期を使用してコードを修正します。この最初の例は非常に単純です。とても基本的なことです。タスクを作成するだけです。
出力:
タスクは Runnable インターフェイスのインスタンスです。これを runnable と呼びます。このインターフェイスはラムダ式を使用して実装できます。このタスクは新しいスレッドに与えられ、このスレッドのコンテキストで実行されます。したがって、このタスクを実行しているスレッドの名前を出力するだけです。私は…で実行しています。 Thread.currentThread() は、現在のタスクを実行しているスレッドを返す Thread クラスの静的メソッドです。そして、このスレッド オブジェクトで getName() を呼び出してスレッドの名前を返し、その後 Thread インスタンス t = new Thread を作成するだけです。 この実行可能ファイルをパラメータとして渡します。したがって、このスレッドはこのコード部分を実行します。そしてそれを立ち上げること。 t.start() これは、呼び出す必要がある start() メソッドです。 t.setName(“My thread”) を使用して、このスレッドの明示的な名前を指定することもできます。これで、このコードを実行できるようになりました。ここで、call start() メソッドの代わりに run() メソッドを呼び出します。このコードを実行すると、タスクは正しく実行されますが、作成したスレッドでは実行されないという問題が発生します。これは、メイン メソッドを実行するスレッドであるメイン スレッドで実行されます。したがって、新しいスレッドを起動したい場合は、この run() メソッドを呼び出すべきではありません。
出力:
単純に 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. |
このスレッドの名前を返します
以上がJavaのスレッドライフサイクルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。