【Java】【Thread】スレッドの基礎

こんにちは、たくじろう(@takujiro_0529)です。

今回は、Javaでマルチスレッドを実装してみたくなったので、勉強したことをまとめていきます。

スポンサーリンク




Threadクラス

実装するには「Thread」クラスを利用します。

Threadクラス(Javadoc)

メソッドがたくさん用意されていますが、今回は簡単にマルチスレッドを実行するまでの基本的な部分を書いていきます。

簡単な実装

それでは簡単に実装してきます。

手順としては、以下になります。

① Threadクラスを継承したクラスを用意する
② ①に「run」メソッドを書く
③ mainからスレッドを呼び出す。

それではやっていきます。

今回は同じJavaファイル内にソースを書いていきます。

① Threadクラスを継承したクラスを用意する

public class Test {
    public static void main(String args[]){
    }
}

class ThreadClass extends Thread {}

ソースの下の方にThreadClassと命名したThreadを継承したクラスを用意しました。

② ①に「run」メソッドを書く

runメソッドがスレッドを動かした時に行いたい処理を記述するメソッドです。

public class Test {
    public static void main(String args[]){
    }
}

class ThreadClass extends Thread {
    
    public void run (){

        // sleepメソッドを利用するためのtryブロック
        try {

            System.out.println("1行目です。");

            // 3秒間処理をストップします。
            sleep(3000);

            System.out.println("2行目です。。");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

スレッドを複数実行されているのがわかるようにsleepメソッドを利用しています。

③ mainからスレッドを呼び出す。

呼び出し方法は、ThreadClassクラスをnewして、startメソッドを実行します。
そうすることで先ほど記述したrunメソッド内の処理が実行されます。

public class Test {
    public static void main(String args[]){

        // newします
        ThreadClass tc = new ThreadClass();

        //startメソッドを実行します。
        tc.start();
    }
}

class ThreadClass extends Thread {
    
    public void run (){

        // sleepメソッドを利用するためのtryブロック
        try {

            System.out.println("1行目です。");

            // 3秒間処理をストップします。
            sleep(3000);

            System.out.println("2行目です。。");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

実行結果

1行目です。
2行目です。。

今回は1スレッドを実行しただけですので、あまりマルチスレッドを実装した感じは少ないと思います。

次はもう一つnewをして実行してみましょう。

public class Test {
    public static void main(String args[]){

        // 2つnewします
        ThreadClass tc = new ThreadClass();
        ThreadClass tc2 = new ThreadClass();

        //startメソッドを実行します。
        tc.start();
        tc2.start();
    }
}

class ThreadClass extends Thread {
    
    public void run (){

        // sleepメソッドを利用するためのtryブロック
        try {

            System.out.println("1行目です。");

            // 3秒間処理をストップします。
            sleep(3000);

            System.out.println("2行目です。。");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

実行結果

1行目です。
1行目です。
2行目です。。
2行目です。。

実行結果の通りになりましたか?

普通のシングルスレッド処理でしたら、1行目、2行目、1行目、2行目と出力されますが、2つのスレッドが同時に動いているので同時に結果を出力しています。

まとめ

簡単にマルチスレッドを実行できましたか?

私も実装してみて思いましたが、かなり簡単ですよね。

多くのプロジェクトでマルチスレッド処理を利用していると思いますが、いろいろな処理を素早く終わらせるにはまず考えられる手段です。

どのタイミングでマルチスレッドにするかは経験が必要かもしれませんが、知識の引き出しに入れておきましょう。

また、マルチスレッド処理をするにあたって排他処理「synchronizedブロック」も勉強しておかなければなりません。

合わせて勉強しておきましょう。

byたくじろう

スポンサーリンク

スポンサーリンク



シェアする

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

フォローする