\r\n\r\n
実行中のプログラムをプロセスと呼びます。このプロセスは、いくつかのサブプロセスに分けることができる。例えば、microsoftwordはプロセスです。同時に、スペルミスや文法のチェックも行います。これはサブプロセスです。このようなサブプロセスをスレッドと呼びます。マルチスレッド処理とは、複数のスレッドを同時に実行する処理のことです。スレッド化されたアプリケーションは、さまざまなプログラミング言語を用いて構築することができます。runnableとthreadはJavaプログラミングに関連しています。Runnableを実装した場合、多くのスレッドが同じスレッドオブジェクトを共有することができますが、スレッドクラスを拡張した場合、各スレッドは一意のオブジェクトを関連付けることができます。ここがRunnableとThreadの大きな違いです。
1. 概要と主な違い 2. ランナブルとは 3. スレッドとは 4. ランナブルとスレッドの類似点 5. 横並びの比較 - ランナブルとスレッドを表形式で 6. まとめ
スレッドがある状態を通過する。"New "はスレッドのライフサイクルの開始点です。新しいスレッドでstart()メソッドが呼ばれた後、そのスレッドは実行可能な状態になります。スレッドスケジューラが実行中のスレッドを選択した場合、そのスレッドがその状態を選択する。他のスレッドがタスクを実行するのを待っている場合、そのスレッドはその状態を待っていることになります。スレッドが作業を終えると、終了状態になります。
実行可能なスレッドは,runnableインタフェースを用いて実装することができる.
図01:実行可能なインタフェースを用いてスレッドを生成するJavaプログラム
上記のプログラムによると、Runnable DemoクラスはRunnableインタフェースを実装しています。run()メソッドは、Runnableインタフェースを実装しているクラスに配置されています。スレッドの入り口となる。ロジックはrun()メソッドにあります。メインプログラムでは、実行可能なDemoクラスからインスタンス化したオブジェクトを定義して、スレッドを作成しています。t1 を使って start() メソッドを呼び出しています。
以下の手順を参照してください。
図02:Javaプログラムは実行可能なインタフェースを実装することで、ループを実行するためのスレッドを生成する
上の例によると、Runnable DemoというクラスはRunnableインターフェースを実装しています。スレッドを使った実行ロジックはrun()メソッドで記述します。メインプログラムでは、実行可能なDemoクラスからインスタンス化したオブジェクトを定義して、スレッドを作成しています。そして、t1 を使って start() メソッドを呼び出します。
スレッドを作成するもう一つの方法は、スレッドクラスを拡張することです。3つのステップで構成されています。1つ目は、Threadクラスの拡張として宣言することです。そして、run()メソッドを記述する。スレッドが実行すべきステップのシーケンスを持つ。最後にスレッドオブジェクトが生成され、start()メソッドが呼び出されてスレッドの実行が開始されます。以下のプログラムをご参照ください。
図03:拡張スレッドクラスを使用したJavaプログラム
上記のプログラムによると、MyThreadクラスはThreadクラスを継承しています。run()メソッドには、スレッドで実行されるロジックが含まれています。スレッドの入り口となる。その後、スレッドオブジェクトが作成されます。スレッド1です。スレッドはstart()メソッドで開始されます。run()メソッドの呼び出しが実行されます。
以下は、Threadクラスを2つのクラスで拡張したサンプルプログラムです。
図04:Threadクラスを拡張した2つのクラスによるJavaプログラム
上のプログラムによると、クラスAもクラスBもスレッドクラスを拡張しています。どちらのクラスもrun()メソッドを実装しています。メインスレッドは、main()メソッドを実行します。メインスレッドが終了する前に、スレッド1とスレッド2を生成して起動し、メインメソッドが終了するまでに3つのスレッドが並列に実行されます。スレッドの出力順は特に決まっていない。スレッドが起動すると、その実行順序を決めるのは難しい。独自に運営しています。
実行可能 vs. スレッド化 | |
Runnableは、Javaにおけるスレッド生成のためのインタフェースで、複数のスレッドが同じスレッドオブジェクトを共有できるようにするものです。 | threadは、各スレッドが一意のオブジェクトを関連付けるスレッドを作成するために使用されるJavaのクラスです。 |
思い出の品 | |
Runnableでは、複数のスレッドが同じオブジェクトを共有するため、必要なメモリが少なくて済みます。 | スレッドクラスでは、各スレッドが一意のオブジェクトを作成するため、より多くのメモリを必要とします。 |
拡張された機能 | |
実行可能なインタフェースを実装した後、クラスを拡張することが可能です。 | Javaは多重継承をサポートしておらず、Threadクラスを拡張した後は、他のクラスを拡張することができません。 |
コードの保守性 | |
実行可能なインターフェースは、コードの保守を容易にします。 | スレッドクラスではメンテナンスに非常に時間がかかる。 |
プロセスは複数のサブプロセスに分割され、複数の作業を同時に行う。このようなサブプロセスをスレッドと呼びます。スレッドのインスタンス化は、runnableインタフェースを実装するか、スレッドクラスを拡張することによって行うことができます。オブジェクト指向のプログラミングでありながら、簡単に拡張できるクラスではありません。Runnable を実装した場合、多くのスレッドが同じスレッドオブジェクトを共有することができますが、スレッドクラスを拡張した場合、各スレッドは一意のオブジェクトを関連付けることができます。ここがRunnableとThreadの違いです。スレッドクラスに複数のオブジェクトを作成すると、より多くのメモリを消費することになります。
本記事のPDF版をダウンロードし、オフラインで使用する場合は、引用の指示に従ってください。RunnableとThreadの違いについては、こちらからPDF版をダウンロードしてください。