Javaでスレッドを作成する方法は? | Javaでのマルチスレッド
公開: 2020-12-29この記事では、Javaでのスレッド化を見て、スレッド化を可能にするメカニズムを探ります。
目次
Javaでのスレッド化
Javaのスレッド機能は、軽量のサブプロセスです。 これは、処理の最小単位と見なされます。 これは、プログラムでマルチタスクを実現するための手段です。 ゲームやアニメーションなどに便利な機能です。
Javaには、スレッドとマルチスレッドを作成するためのサポートが組み込まれています。 これは、CPUスペースを最適に利用することにより、非効率性とラグを最小限に抑えるための賢いアプローチです。 Javaでは、これは2つの方法で実行できます。
- スレッドクラスを拡張する、または
- 実行可能なインターフェイスを実装する
複数のスレッドが同時に実行される場合、それはマルチスレッドと呼ばれます。 これにより、基本的に、プログラムの複数の部分を同時に実行でき、スレッドの各部分と各スレッドは、実行への個別のパスをたどります。
スレッドは共有メモリスペースを利用します。 各部にメモリが割り当てられていないため、CPUを最大限に活用できます。 さらに、コンテキストの変更にはそれほど時間はかかりません。 ただし、スレッドが多すぎると、CPUがコンテキスト切り替えに関与し、実行が遅れる可能性があります。
スレッドは、次の6つの状態のいずれかに存在できます
- NEW –スレッドが作成されるとすぐに、新しい状態で存在します。 これは基本的に、スレッドがまだ実行を開始していないことを意味します。
- RUNNING –スレッドが実行されているとき、または実行される予定の列にあるとき、スレッドは実行状態にあります。
- 待機中–別のアクティビティを実行できるようにするために、実行中のスレッドが停止または一時停止されることがあります。 非タイムアウトバージョンのwait()またはjoin()は、スレッドの実行を一時停止する可能性があります。 アクションが発生すると、中断されたスレッドが再開されます。
- TIMED-WAITING –実行中のスレッドが特定の期間一時的に停止または一時停止されることがあります。 たとえば、sleep()関数が呼び出されたとき。
- BLOCKED –中断されたJavaスレッドが特定のリソースを取得できない場合、そのスレッドはブロックされ、ブロックされた状態で存在します。
- TERMINATED –スレッドが実行を完了すると、スレッドは終了状態になります。 ただし、スレッドはいつでも終了できます。
Javaアーキテクチャとコンポーネントの詳細をご覧ください。

Javaでスレッドを作成する利点
スレッドを作成することにはいくつかの利点があります。 これらのいくつかは
- スレッドは独立しているため、共有メモリスペースで動作している場合でも、1つの実行が別の実行に影響を与えることはありません。 これは、複数の操作を同時に実行できることも意味します。
- スレッド化はマルチタスクの一形態であり、時間を節約します。
- あるスレッドのエラーが別のスレッドに影響を与えることはありません。
Javaでスレッドを作成するにはどうすればよいですか?
上で説明したように、これを行うには2つの方法があります。スレッドクラスを拡張する方法と、実行可能なインターフェイスを実装する方法です。
スレッドクラス
Threadクラスには、操作の実行、スレッドの管理、追跡を可能にするコンストラクターとメソッドがあります。 Objectクラスを拡張し、コンパニオンRunnableインターフェイスを実装します。 スレッドクラスに存在するコンストラクターは、:Thread()、Thread(String name)、Thread(Runnable r)、およびThread(Runnable r、String name)です。
以下は、メソッドとその説明です
方法 | 何に使われますか? |
始める() | 実行を開始します |
走る() | スレッドのアクションを実行するには |
睡眠() | スレッドを所定の期間スリープ状態にします |
加入() | 別のスレッドが終了するまで待ちます |
getPriority() | 特定のスレッドの優先度を示すため |
setPriority() | 特定のスレッドの優先度を変更するには |
getName() | epecifiedスレッドの名前を返すには |
setName() | 指定したスレッドの名前を変更するには |
getId() | 指定されたスレッドのIDを返すには |
生きている() | スレッドがまだ誰かに存在するかどうかをテストするには |
収率() | スレッドオブジェクトの実行を一時停止して、別のスレッドを実行できるようにします |
つるす() | 特定のスレッドを一時停止するには |
履歴書() | スレッドを一時停止状態から再開するには |
ストップ() | 特定のスレッドを停止するには |
破壊する() | スレッドグループとサブグループを破棄するには |
割り込み() | スレッドの実行を中断するには |
isinterrupted() | 特定のスレッドの実行が中断されているかどうかをテストするには |
割り込み() | 現在のスレッドの実行が中断されているかどうかをテストするには |
activeCount() | スレッドグループ内のアクティブなスレッドの数を返すには |
holdLock() | 現在のスレッドが指定されたオブジェクトのモニターロックを保持している場合にのみtrueを返します。 |
getState() | 特定のスレッドの状態を判別するには |
setContextClassLoader() | コンテキストClassLoaderを設定するには |
getContextClassLoader() | コンテキストClassLoaderを返すには |
Threadクラスを拡張してスレッドを作成するには、最初にjava.lang.Threadクラスを拡張するクラスを作成する必要があります。 このクラスは、run()メソッドをオーバーライドするように定義されています。 次に、start()メソッドを呼び出してスレッドの実行を開始することにより、後続の新しいクラスにオブジェクトが作成されます。

必読:チェックアウトすべきJavaのパターンプログラム
実行可能なインターフェース
これは、スレッドを作成する最も簡単な方法です。 Runnable Interfaceを実装するために必要なメソッドは、run()の1つだけです。
それを宣言するために、私たちは書きます
public void run()

run()内で、新しいスレッドを作成するためのコードの記述に進みます。
世界のトップ大学のソフトウェアエンジニアリングコースに登録します。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。
スレッドクラスと実行可能なインターフェイス
スレッドクラスは、他のクラスを拡張できないようにします。 これは、Javaでは多重継承ができないためです。 ただし、他のクラスを拡張し続けるRunnableインターフェースを実装する場合は、これは当てはまりません。
Threadクラスを拡張すると、スレッドの機能を強化するいくつかの重要なメソッドにアクセスできるようになります。 たとえば、yield()、stop()、isalive()、interrupt()などです。 Runnableインターフェースには、かなり制限的なメソッドしかありません。
まとめ
Java、フルスタックソフトウェア開発について詳しく知りたい場合は、upGrad&IIIT-Bのフルスタックソフトウェア開発のエグゼクティブPGプログラムをチェックしてください。これは、働く専門家向けに設計されており、500時間以上の厳格なトレーニングを9時間以上提供しています。プロジェクト、割り当て、IIIT-B卒業生のステータス、実践的な実践的なキャップストーンプロジェクト、トップ企業との仕事の支援。
