感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Javaでマルチスレッドプログラミング。基礎の基礎サンプル。

<スポンサーリンク>

マルチスレッドって何?

まず、スレッドとは1つの計算処理の単位である。
実行スレッドとはアプリケーションの命令を最初から1つずつ順番に実行するための実行の制御のことである、
マルチスレッドプログラミングとは、複数のスレッドを同時に実行させることである。
マルチスレッドの目的は、1つのアプリケーション内にできるだけ多くのスレッドを与えることである。
そのためには、スレッド間でCPUを共有する必要がある。

Javaではスレッドをサポートするために以下のクラスとインターフェースを提供している。
java.lang.Threadクラス
java.lang.Objectクラス
java.lang.Runnableインターフェース

Threadクラスを使用したJavaのサンプル(Threadクラスをextends)

以下のサンプルを見たらわかるが、coount.start()のように、start()を呼び出すとrun()が実行される。

package mutlithread;

public class ThreadSample1 {
    public static void main(String[] args) {
        Counter count = new Counter();
        System.out.println("Count Start!!");
        count.start();
        for (int i = 0; i < 15; i++) {
            System.out.println("あ");
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        
    }
}

Threadクラスを継承する。

package mutlithread;

public class Counter extends Thread {
    public void run() {
        for (int i = 0; i <= 15; i++) {
            System.out.println(i + ",");
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO 自動生成された catch ブロック
                e.printStackTrace();
            }
        }
    }
}

実行結果

Count Start!!
あ
0,
1,
あ
あ
2,
3,
あ
あ
(略)
14,
15,

というように、2つのスレッドが並行して動いていることがわかる。

Threadクラスを使用したJavaのサンプル(Runnableをimplements)

今度はRunnableをimplementsする形でのマルチスレッドプログラミングのサンプル

package mutlithread;

public class ThreadSample2 {
    public static void main(String[] args) {
        RunnableCounter count = new RunnableCounter();
        Thread th = new Thread(count);
        System.out.println("count thread start!!");
        th.start();
        for (int i = 0; i < 15; i++) {
            System.out.println("い");
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO 自動生成された catch ブロック
                e.printStackTrace();
            }
        }
        System.out.println("main thread is finished!");
        
    }
}

こちらはRunnableをimplementsしている。

package mutlithread;

public class RunnableCounter implements Runnable {
    public void run() {
        for (int i = 0; i < 15; i++) {
            System.out.println(i);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO 自動生成された catch ブロック
                e.printStackTrace();
            }
        }
        System.out.println("counter thread is finished!");
    }

}

実行結果は以下のとおり。

count thread start!!
い
0
1
い
(略)
い
い
13
い
14
main thread is finished!
counter thread is finished!

わかりづらいけれど、2つのスレッドが並行して実行されていることがわかる。

読んだ本

SUN教科書 Javaプログラマ(SJC-P) 5.0・6.0両対応(試験番号310-055、310-065)

SUN教科書 Javaプログラマ(SJC-P) 5.0・6.0両対応(試験番号310-055、310-065)

感謝のプログラミング

今回で感謝のプログラミングは【449時間目】
10000時間まで、あと【9551時間】