シリーズ一覧
[Java Gold対策] はじめてのスレッド 1日目 : スレッドとは?
[Java Gold対策] はじめてのスレッド 2日目 : スレッドの作り方
[Java Gold対策] はじめてのスレッド 3日目 : スレッドの作り方2
[Java Gold対策] はじめてのスレッド <よりみち1> : 匿名クラスで書く。
[Java Gold対策] はじめてのスレッド <よりみち2> : ラムダ式で書く。
[Java Gold対策] はじめてのスレッド 4日目 : スレッドをsleepさせよう
[Java Gold対策] はじめてのスレッド 5日目 : joinメソッドで順番待ち
[Java Gold対策] はじめてのスレッド 6日目 : runメソッドで条件付き停止
はじめに:スレッドは難しくない。
マルチスレッドを行えば、同時に2つ以上の命令を実行させることができます。
現在、私たちの利用するアプリケーションにおいて、マルチスレッドは当たり前になっています。
知らないクラスやインターフェイスが出てきて、難しく感じてしまった方も、大丈夫です。
全然難しくない。むしろ便利!という感覚で、スレッドを使えるようになっていきましょう。
マルチスレッドを使いこなせるようになれば、実現できる処理のレベルがグッと上がります。
試験対策だけでなく、本質的なプログラマとしての能力が底上げされるので、楽しみにしていてくださいね。
初日の今回は、そもそも…のお話です。
概要は知っていて早く使いたいよ、という方は、今回は読み飛ばしてOKです。
それでは、一緒に楽しんでいきましょう!
いままで使っていたのは、シングルスレッド。
スレッドとは。
今まで書いてきたJavaのコードでは、mainメソッドに書いてあるコードを、上から順番に実行していきました。
時には、if文で分岐したり、try~catch文で処理が飛んだりしましたが、基本的に一連の流れで処理を行っていました。
この流れのなかでは、「同時に複数の命令が実行される事」はありませんでした。
この、プログラムの一連の処理の流れがスレッドです。
(つまり、今までのmainメソッドの処理は、シングルスレッドでの処理ということです。)
- シングルスレッド : スレッド(処理の流れ)が一つのみ
- マルチスレッド : スレッド(処理の流れ)が複数ある
1つのプログラムの流れ、つまりシングルスレッドでは、実行中の処理が終わるまで次の処理には進めません。
これでは、困ることがあります。どういうことでしょうか?
例えば、こんなこと。
Webサイトを例に取ってみましょう。
仮に、テキストと画像しかないサイトを表示させたいとします。Webブラウザは、インターネットからテキストや画像をダウンロードして、画面に表示します。
- 画像をダウンロード
- テキストをダウンロード
- 画像を表示
- テキストを表示
もし、画像のデータが大きくダウンロードに時間が掛かり、テキストデータは軽量でダウンロードが早かったとしたら、テキストデータを先にダウンロードして表示してしまえば良さそうです。
しかし、シングルスレッドの場合は「次の処理をスキップする」ということができません。
画像のダウンロードが完了して初めて、テキストのダウンロードを開始できるのです。
しかし、我々が今利用しているブラウザは、「処理をスキップする」ということができていますよね?
通信量が乏しい時には、文章だけ先に表示されるサイトを見たことがあると思います。
これはまさに、マルチスレッドのおかげなんです。
では、マルチスレッドとは何でしょうか?
はじめまして、マルチスレッド。
マルチスレッドとは、処理の流れが複数ある、ということでした。
先程のWebサイトの例でいうと、こんな感じでしょうか。
- 画像をダウンロード
- 画像を表示
スレッド1
- テキストをダウンロード
- テキストを表示
スレッド2
やりましたね!
これなら、スレッド1と2を同時に実行して、速い方から表示させることが可能になります。
ちなみに、この処理をなんとなくコードにするとこのようなイメージになります。(あくまで、イメージです。)
知らないクラスやメソッドがあると思いますが、次回以降に出会えますので、楽しみにしていてください!
今日のキーワード
- スレッド : プログラムの処理の流れの単位。一つのスレッドは順次処理。
- シングルスレッドプログラム: 一つのスレッドのプログラム
- マルチスレッドプログラム: 複数の処理の流れがあり、同時(※)に複数の命令が実行される。
※
厳密に言うと全くの同時に処理が進められているわけではありません。
それぞれのスレッドの処理を細かい単位に区切って、人間が気づかないくらいのスパンで処理を切り替えて行っています。その結果、同時に処理が進行しているように感じます。
詳しくは、並列処理と並行処理について調べてみてください。
おわりに:次回やること
今回は、スレッドについてイメージをつかみました。
次回は、具体的にスレッドの作り方を見ていきましょう。
実際のコードを見ていきますので、楽しみにしていてくださいね!
コメント