19.0522
マルチスレッド(multiple threads) とは、
複数の 「プログラムの処理の実行単位」 を持っていること
です。
例えば、
4人で100個の荷物を運ぶ場合:一人25個づつ運ぶとして:
シングルスレッド(1つのプログラムしか実行できない)の時
マルチスレッド の時
を、こんなプログラムで、比べてみましょう。
シングルスレッドの時のコード
マルチスレッドの時のコード
!試しに、TryKotlin で、実行しましたが、うまく動きません!
でも、それは、ブラウザ環境のせいだと思います。
コードには、根本的な問題は、ないでしょう。
それで、実行結果は、コードの後に書いてありますが、
「Thread」 を、使った方が
約3倍ほど、早く実行できました。
この例では、
シングルスレッド の時は、4人 が、同時には実行できません。
/ 荷物を載せるための台車が、1台しかないようなイメージ.
マルチスレッド では、4人が同時に運べるイメージです。
つまり、
マルチスレッドを利用すると、実行が早くなる
ただし、
マルチスレッドを、バグなく扱うのは、単純ではなく、深い知識が必要
と言われています。
ここでは、単に、マルチスレッド という 概念/意味 を、知っておきましょう。
マルチスレッド を、文法的な観点から眺める
・ Kotlinリファレンスの構文
・ Javaのclassライブラリ リファレンス(Threadクラス)
この2つから見ていきますが、私は、
おおざっぱにしか分からず、細かいところは、不明です。ご了承ください。
ただ、それでも、おおざっぱには理解できると思います。
まず、
Kotlinリファレンス の、Thread関数のページ
です。
また、
Javaの、Threadクラスのページ
です。
これらの大筋をまとめるとこんな感じになるでしょう。
上のコード は、
Kotlin の、thread関数
です。
そして、
返すのは、Java の Threadクラス の インスタンス
です。
ですから結果的に、
thread関数 を、実行すると、
その引数である関数 を、実行するための(マルチスレッドを実現するための)
スレッド が、生成される
この部分は、多少なりとも、Java の、Threadクラス と Runnableインターフェイス 、
の、知識があった方が、イメージしやすいと思います。
(やはり、Javaの知識は、あるに越したことはないようです。
でも、私が、Java を覚えようと思ったころ、2003年ぐらいか? には、
Java を、やるには、C が分からないとだめだ、、みたいな迷信は、ありました。
確かに、分かっていた方が、いいのではありますが、必須ではなかった。)
ということになります。
でも、最初に見たコード は、このリファレンス のコードとは違うぞ!
と、思われると思います。
そこで、
このリファレンスの、構文を、忠実に再現したコードを、書いてみました(26~31行目)。
/ 引数の前の文字は、「透かし文字の補助」 ですので、実際に書くと、エラーになります。
つまり、同じ事ですね。
また、
簡単な書き方(デフォルトの引数をそのまま使っている)
は、このコードをまねてください(と、逃げます:() が不要になっている)。
/ Kotlin では、この構文のように、
/ 関数の引数 に、デフォルトの値 を、設定できます
/ 尚、{ wm1.carry25boxes() } は、
/ () -> Unit 型(返し値がない)の、ラムダ式です。
/ そうです、関数は返し値がない 型 である必要があります。
まとめ
ここでは、
マルチスレッド の、概念
を、具体的なコードで見ていきました。おおざっぱに理解しておいてください。
実際に使うには、場合によっては、さらに深い理解がないと、バグを起こす可能性があります。