× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
Javaでスレッドを使うときは、
または
とする。 参考 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Thread.html なんだけど、最近自分で書いてるプログラムで、 なぜかスレッドが実行されないことがあった。 送信用スレッドと受信用スレッドを立てて、 何かデータを送信したくなったら、送信用スレッドから送信し、 それを受信用スレッドで受信する。それだけなんだが、 なぜか送信スレッドが走らないようで、一向に送信されない。 おかしいな、と思って、デバッグ実行してブレークポイントを付けると、ブレークする。 で、『?」と思ってそのまま実行続けると、ちゃんと送信される。 どういうこっちゃ。と。 今度は、System.out.println();を仕込んでみる。 すると、これまた動いた。 で、println外してみると、また動かない。 どうやら、ブレークポイントを打ったり、printlnを書いたりしていると、 「処理をしなきゃ」と考えてスレッドが走るのではないかと予想。 (って、元々run()内に書いてある内容だって、やってくれないと困るんだが…) 現状、スレッドが停止するまでwhile無限ループをしているはずなのだ。 で、どうしてそういうことが起こるのか。 スレッドの優先順位を受信用スレッドより高くしたり、 他のスレッドをスリープさせたりしてみたけど、何も変わらず。 とりあえずブレークポイント打てば実行される…って毎回そんなことできない。 printlnしても良いんだが、遅いよそれじゃ。 で、もっと調べてみた。 Threadクラスには、getState()という関数があるらしい。 どれ、一つ見てみよう。 と思ったら、 Thread.State state = getState(); と記述するだけでもスレッドが実行されるようになった。 (ちなみにstateはちゃんとRunnableだった) 結局解決してない気がするが、前よりはわずかに意味が出たような気がする。 ひとまずこれで。 PR |
|
トラックバックURL
|