Android開発備忘録「日本語でおk」

自分が勉強した事を、忘れないようにメモする備忘録です。決して「他人様にお教えする」などというおこがましいものではありません。いつまでたっても覚えない自分の為のチラ裏ブログ

非同期処理がよくわかるサンプル

同期、非同期の処理について「どう動作するのか」は”なんとなく”理解していたものの、「どう実装するのか」についてはサッパリだった。
という訳でググってみた時に見つけたのが、「とほほの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が理解できるようになったら)試してみよう。