非同期処理がよくわかるサンプル
同期、非同期の処理について「どう動作するのか」は”なんとなく”理解していたものの、「どう実装するのか」についてはサッパリだった。
という訳でググってみた時に見つけたのが、「とほほのJava入門」の中の「スレッド」のページ。
元のサンプルはループが1000回実行されてるが、これを10回に書き換えてみた。(なんとなく直観的なような気がして)
class ThreadTest{ public static void main(String[] args){ ThreadTestThread tt = new ThreadTestThread(); tt.start(); for(int i=0;i<10;i++){ System.out.print('.'); } } } class ThreadTestThread extends Thread{ public void run(){ for(int i=0;i<10;i++){ System.out.print('@'); } } }
実行すると、「main」側で「.」を10回出力(表示)する間に、もう一つのスレッドが「@」を割り込んで出力するというデモプログラム。
上記プログラムを実行した時の結果(例)は、こんな感じ
↓
.@@@.@@@@@@@........
もちろん、スレッドの動作順序(というかタイミング)はその時々によるので(なんでかは知らん)、毎回この順番とは限らない。てか、この結果は偏り過ぎだろ。
実装方法としては、
・スレッドを生成するクラスを定義する(例では「ThreadTestThread」クラス)
このクラスは親クラスである「Thread」クラスを継承している
(教科書的な表現だと、スーパークラスの「Thread」クラスからサブクラスの「ThreadTestThread」を派生させる。みたいになるのか)
・main側で「ThreadTestThread」クラスをインスタンス化して(ttがそれ)、Threadクラスに実装されている「start」メソッドを呼ぶだけ。簡単。(startメソッドを呼ぶと、run()が実行されるらしい)
どうやら非同期処理を実現するには別の方法もあるらしいが、また今度(Threadが理解できるようになったら)試してみよう。