【Javaプログラミング】Thread(スレッド)とは?使い方や作り方についても-プロショvol.65

スポンサーリンク
Java攻略

Thread(スレッド)というものに出くわしたから、今回はthreadいついてまとめた。

Threadはどのようなものか、またどのように使用するのかについて見ていく。

 

スポンサーリンク

Threadとは?

 

「道筋」や「脈絡」といった意味がある。

プログラミングでは処理の流れのことを指す。

1つの処理で完結するプログラムをシングルスレッド(single thread)

同時に複数のプログラムが処理されるのをマルチスレッド(multiple thread)という。

 

Javaはマルチスレッドのプログラミング言語。

複数の処理が一度に実行されることで、ゲームができたりする。

 

Threadを使用するメリット

 

以下が主に(複数の)Threadを使用するメリットとして挙げられるもの。

Threadを使用することで処理時間が短くなる。

普通は上から順番に一つ一つ実行されるため時間がかかる。

だかマルチスレッドを作成することで、複数の処理を同時進行で行うことができるようになる。

Javaプログラミングにおいて重要なもの。

 

Thread(スレッド)の作成方法

 

Threadを作成するには2通りの方法がある。

Threadクラスを継承して使用する

 

ThreadクラスはJava APIの一つ。

すでにJavaに用意されているプログラムで、「java.lang」というパッケージに「Threadクラス」が存在する。

継承する場合は「import」などは不要。

継承させたいクラスに「extends」を付けて「Threadクラス」を引き継がせることができる。

以下にThreadクラスを使用したプログラムを作成してみた。

class RUNNING extends Thread{
public void run() {
System.out.println(“走っている”);
}
}
class WAITING extends Thread{

public void run(){
System.out.println(“待っている”);
}
}
public class Sample {public static void main(String[] args) {
RUNNING running = new RUNNING();
WAITING waiting = new WAITING();
running.start();
waiting.start();
}
}
実行すると以下が表示される。
走っている
待っている

RUNNINGクラスとWAITINGクラスがThreadクラスを継承している。

 

Threadクラスには元からstart()メソッドが組み込まれている

そのためstart()メソッドを呼び出すことで、「このThreadクラスを実行したい」とJavaに伝えられる。

クラスを実行したいと伝えられると、Javaはメモリ上にスレッドを割り当てる。

メモリ上にスレッドが割り当てられると、run()メソッドが呼び出される。

呼び出されたrun()メソッドは他のスレッドで実行される。

run()メソッドは当該のThreadクラスの中に書かれていないと、実行結果は空白になった。

 

class RUNNING extends Thread{

}

上の状態でstart()メソッドで呼び出しても何も表示されなかった。

 

プログラムが強制終了されるか、待機状態になるまでrun()メソッドはずっと呼び出し続けられる。



implements Runnableを使用する

 

Threadを作るもう一つの方法は「implements Runnable」というプログラムを使用する方法。

implementsは「実装する」という意味。

Runnableは「実行可能、動作可能」という意味がある。
Runnableはクラス。

実行可能なものを実装するってことかね。

まず、先で見たコードの「extends Thread」の部分を「implements Runnable」に変える。

Runnableを実装したクラスに、run()メソッドを作って処理内容を書く。

メインクラス内にThreadクラスのオブジェクトを作成。

 

オブジェクトを作成する際、()内にRnnableクラスを実装したクラスのコンストラクタを作成する。

それからstart()メソッドを呼び出す。

class RUNNING implements Runnable{
public void run() {
System.out.println(“走っている”);
}
}
class WAITING implements Runnable{
public void run(){
System.out.println(“待っている”);
}
}
public class Sample {
public static void main(String[] args) {
Thread running = new Thread(new RUNNING());
Thread waiting = new Thread(new WAITING());
running.start();
waiting.start();
}
}
実行すると以下が表示される。
走っている
待っている

Runnableを使用することで、クラスをサブクラスにせずにスレッドを作ることができる。

クラスは本来1つからしか引き継ぐことができない。

もしThreadクラスを引き継いだら、ほかのクラスを継承できない。

 

Runnableを使用すればスレッドを作成し、さらにクラスを引き継ぐことが可能になる。

 

オブジェクトを作成する場合はThreadクラスから作成するということに注意。

そして()内にはRunnableを実装したクラスのコンストラクタを書く。

Thread running = new Thread(new RUNNING());

Threadクラスを継承するときとオブジェクトの作り方が違うから注意。

最後に

 

Threadクラスを継承することに比べると、implements Runnableの方が少々複雑に見えるかもしれない。

けれど、継承はたった一回しかできない。
そのためThreadクラスを引き継いでしまうと、もうほかのクラスを継承できない。

その点、「implements Runnable」を使用することでスレッドを作成できるほか、別のクラスを継承できる。

簡単なのは継承を使用すること。
便利なのは「implements Runnable」といった感じだろうか。

 

これでアプリ作成に一歩近づいたかな?

このエントリーをはてなブックマークに追加

コメント

タイトルとURLをコピーしました