スレッドの作成(Runnableインターフェイス)|Javaから楽しく学ぶ!ゲームプログラミング専門学校

Javaから楽しく学ぶ!ゲームプログラミング専門学校

ゲームプログラミングとはその名のとおりゲームのプログラムを作ることを指します。『Javaから楽しく学ぶ!ゲームプログラミング専門学校』ではゲームプログラミングについて、実際にゲームプログラムをJAVAプログラミング言語を使用し、作成していきながら詳しく解説していきます。

スレッドの作成(Runnableインターフェイス)

スレッドの作成方法として、前回の記事ではThreadクラスを利用したやり方を記述しました。
今回の記事ではThreadクラスを利用するのとは別の方法でマルチスレッドを実現する方法を記述します。

Threadクラスを利用することで新しいスレッドが作成でき、マルチスレッドのしくみを実現できるようになります。

しかし、Threadクラスを利用したやり方には、注意しなければならない点があります。

Threadクラスを使おうとするクラスは、Threadクラスを継承しなければなりません。
ここで、注目してほしいのはJavaのルールとして、

Javaでは多重継承はできない

という制約があります。
つまり、一つのクラスに対して、2つ以上のクラスを継承することができないのです。

例えば下記サンプルのようなコードをコンパイルした場合、Javaはエラーを返します。
class Sample extends Applet, Thread{
………
}

上記サンプルはSampleクラスにAppletクラスとThreadクラスを継承しようとしています。

Javaアプレットを作成する場合、Appletクラスを継承する必要があります。
つまり、Threadクラスを継承することが必然的にできないのです。

このようなとき、JavaクラスライブラリのRunnableインターフェイスを使うことでその問題を解決することができます。
class Sample extends Applet implements Runnable{
………
}

Runnableインターフェイスを実装することで、Threadクラスを継承することなく、マルチスレッドのしくみを作ることができるのです。

下記にRunnableインターフェイスを使ったサンプルを書いてみます。

public class CarRun implements Runnable{
private String carName;

public CarRun(String carName){
this.carName = carName;
}

public static void main(String[] args){
CarRun car1 = new CarRun("インサイト");
CarRun car2 = new CarRun("プリウス");

Thread th1 = new Thread(car1);
Thread th2 = new Thread(car2);
th1.start();
th2.start();

}

public void run(){
for(int i = 0; i < 5; i++){
try{
Thread.sleep(1000);
}catch(Exception e){}
System.out.println(carName + " : " + i + "回目の処理です。");
}
}
}

【実行結果】
インサイト : 0回目の処理です。
プリウス : 0回目の処理です。
プリウス : 1回目の処理です。
インサイト : 1回目の処理です。
インサイト : 2回目の処理です。
プリウス : 2回目の処理です。
プリウス : 3回目の処理です。
インサイト : 3回目の処理です。
プリウス : 4回目の処理です。
インサイト : 4回目の処理です。


上記サンプルはThreadクラスのサンプルとほぼ同じ内容です。
違うのは、Runnableインターフェイスを使ってスレッドを作成している点だけです。

Runnableインターフェイスを実装したクラスでも、Threadクラスを継承したクラスと同じで、run()メソッドを定義し、この中に新しいスレッドで行う処理を記述します。

ただし、スレッドを起動させる方法が若干違ってきます。
        CarRun car1 = new CarRun("インサイト");
CarRun car2 = new CarRun("プリウス");

Thread th1 = new Thread(car1);
Thread th2 = new Thread(car2);
th1.start();
th2.start();

スレッドを起動させるstart()メソッドの実行方法が異なっていることに着目してください。

Runnableインターフェイスを実装したやり方の場合、Threadクラスのオブジェクトを作成する作業が必要になります。
Threadオブジェクトを作成するとき、Runnableインターフェイスを実装したクラスのインスタンスを渡します。

その次に、Threadオブジェクトからstart()メソッドを呼び出せば、新しいスレッドが起動します。

※クラスとオブジェクトの違い
クラスはオブジェクトの型(オブジェクトの特徴をひとくくりにしたもの)を意味します。

トラックバック:0Edit
Copyright © Javaから楽しく学ぶ!ゲームプログラミング専門学校 All Rights Reserved.
当サイトのテキストや画像等すべての転載転用・商用販売を固く禁じます