ホームページ目次前の話次の話

JavaがThreadまみれになって自滅した

2007年8月28日

今年の夏は本当に暑い。8月末だというのに、朝の通勤の時でさえ汗が流れてしまう。 昼間に動くのはあまりにも大変で、食事に外出するのさえ体がゆだってしまいそうである。

そんな天気だから、とても頭を使うような作業には向かないので、 ヨーロッパ人みたいに1ヶ月の夏休みを取って、どこかへ逃げ出すのが正解かもしれぬ。 しかし、それもままならないので、やむなくプログラムなど弄くっている。

ちょっと並列処理というか、Javaでとても重い処理をする部分を別のスレッドにして、 計算量のある処理をしている間もGUIの方に影響が出ないようにするのをやっていた。

そこまではどうってことはなかったのだが、複雑な処理の途中で適当に止めながら、 その中間状態を画面に分かりやすく表示することになった。 これも、スレッドさえ使えば、何なくできるであろうと思っていた。 そして、プログラムに手を入れて、動作確認した。ただし、それは数ヵ月前の話である。

この度、そのプログラムを利用することになり、動作検証をした。 まあ、普通に動かしている分には問題ないのだが、よけいな時にボタンを押すと、 どんどん重くなって、そのうちプログラムがうめき声を出してくたばってしまった。

何か間違っている。スレッドの使い方を間違えたのは明らかだが、 はて、どういう風に間違っているのだろうか。 スレッドの動きを追いかけるのは面倒ではないかと思った。

Eclipseの初心者であるが、ここでデバッグすることにした。 適当に操作すると、スレッドの数がどんどん増えてしまい、 最後はEclipseが重くなってデバッグもほとんど不可能になってしまった。

消え失せるべきスレッドが生き長らえていて、リソースを食って動かなくなっているのは明らかだ。 どうしてくれよう。面倒だから、スレッドを殺してやろうと思って殺すプログラムを組んだら、 Eclipseがいちゃもんをつけてきた。スレッドをいきなり殺そうとしたのがいけなかったようで、 もうちょっとちゃんと始末しなければいけないようだった。 大昔のJavaでは、物騒な殺し方もできたのだが、 今は法律も変って、もうすこし丁寧なプログラムを組まないといけない。 強盗は駄目で、知能犯のような方法で始末しないといけないのだった。

ということで、ちゃんとスレッドの情况を監視し、 正しい作法で殺すというか、終らせることにした。 Javaの世界もどんどん面倒くさくなってきた。 理由は分るけれど、面倒なことである。

さらに、ボタンも、押してはいけないタイミングでは押せないようにするという処理も施してみた。 こういうことをやっていくと、どんどんプログラムを組むのがいやになってくる。 だって、どんどん普通のGUIのプログラムみたいになってしまうではないか。

インターンシップ体験記


ホームページ目次前の話次の話