2002年10月31日の日記です


Synchronized, wait & notify  2002-10-31 17:58:01  COMP
今年の風邪はしつこくて、まだ病み上がりな感じだ。
体が完調でない間も、Java プログラムを細々と作りつづけている。

以前に i-アプリとして作ったものの移植…だったはずが、i-アプリと EZplus の機能があまりに違うことや、せっかくだから機能アップしたいという欲が出たこともあり、大幅な作り直しとなっている。
どのくらい違うかといえば、MS-DOS と Windows 3.1 くらい違う。 Win95 ほど違うという自信はない (^^;;

つまり「見た目が良くなりました」ってこと。
中身はそれほど変わらないのだが、見た目を整えるというのは思った以上に大変なことなのだ。


今月の頭から作っているのに、まだまだα版と呼べるレベルまでも達していない。
一から作っているので、以前は持っていた機能をまだ持っていなかったりもする。

---

Java は「マルチスレッド」を前提としたプログラム言語なので、スレッド同期の命令がしっかりしている。
UNIX などでもマルチスレッドなプログラムは組めるが、C で組むことになるので注意を払って同期するような処理を自分で加えないといけない。

Java では、命令を「synchronized」というブロックで囲むだけで、他の synchronized ブロックと同時に実行されないことが保証される。

synchronized の中で別の synchronized に動いて欲しい、というときはどうするか?
wait を使う。wait すると、その時点でスレッドは休止し、別のスレッドに処理を明け渡す。

休止してしまったプログラムを起こすにはどうするか?
notify を使う。notify すると、休止している別のスレッドを叩き起こす。


この3つの機能が非常に良く出来ていて、スレッドプログラムは Java の腕の見せ所のひとつだ。

---

実は、腕の見せ所であるだけに、ここらへんの命令はしっかり意味を理解して使わないとはまりやすい。
以前 i-アプリのプログラムを作った時に、結構はまった。
そして、今日また移植版のプログラムを作っていてはまった(笑)


学習してないなぁ、と思うが、Java なんてめったに使わないんだもん。


名前 内容


戻る

トップページへ
Google


Web 当サイト内