備忘録としての投稿です
記事にしておきながらなんですが、人に見せることは目的をしておりません。
ですが、見かけた方が内容についていろいろとツッコミを入れてくださると嬉しいです。
【自分について】
となるITベンチャー企業に入社し、日々勉強中です。
主にJavaを勉強しています。
スレッドとは?
プログラムの実行の流れ
基本的にプログラムは一行ずつ、上から下に実行される
この、上から下へのプログラムの実行の流れを「スレッド」という
シングルスレッド / マルチスレッド
・シングルスレッド:上記のスレッドが1つのみ。
そのため、一つのプラグラムが順番に実行される
・マルチスレッド:複数のスレッドを同時に実行する
処理A と 処理B を同時進行できる
並行処理 / 並列処理
・並行処理:2つの処理の実行を切り替えながら、「並行」して処理を進めること
ある時点では、個別の処理しかしていないが、全体像としてみると、同時に進行「しているように」見える
→シングルコアでも可能
・並列処理:実際に2つの処理を同時に行うこと
イメージとしては、
料理をしているときに、煮物の煮ている時間 (=待ち時間) に別の作業をする = 並行処理
二人で同時に料理する = 並列処理
と理解しています。(間違っていたら教えてくださいm(__)m)
Java の Thread
Java では、Thread クラスを使うことで並行 / 並列処理の実装が可能です。
以下、簡素なものですが、サンプルを作成しました。
①シングルスレッド
package MultiThread;
public class SingleThread {
public static void main(String[] args) {
System.out.println("開始");
int t = 0;
for (int i = 0; i < 10000; i++) {
t += i;
}
System.out.println(t);
System.out.println("終了");
}
}
②マルチスレッド
package MultiThread;
class MyThread extends Thread {
public void run() {
int t = 0;
for(int i = 0; i <= 10000; i++) {
t += i;
}
System.out.println(t);
}
}
public class MultiThread {
public static void main(String[] args) {
System.out.println("開始");
MyThread t = new MyThread();
t.start();
System.out.println("終了");
}
}
どちらも、プログラムの上下の流れで見れば、"開始" → for ループ → "終了" となっていますが、マルチスレッドの方は、main スレッドと MyThread が同時に処理されるため、forループの処理終了を待たずに "終了" と出力されます。
補足
Java ではどうやら並行 / 並列は区別されないらしく、どちらも Thread クラスを用いて実装する、らしいです。
まとめ
まだまだ表面的な理解しかできていませんが、並列処理ができると、いろんなことができそうですね。
インターバルタイマーとか作れそうです。
あと、Thread クラスのほかに Runnnable インターフェースもありますが、こちらは現在勉強中です。