忍者ブログ
  • 2024.04
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 2024.06
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/05/19 04:20 】 |
Javaスレッドを走らせる
Javaでスレッドを使うときは、

class MyThread extends Thread{

//override
public void run(){
}
};


または

class MyThread implements Runnable{

//override
public void run(){
}
};

とする。

参考
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
【2011/04/20 00:17 】 | Java | 有り難いご意見(0) | トラックバック()
<<ファイル名の長さ上限 | ホーム | 「ファミコンの驚くべき発想力」>>
有り難いご意見
貴重なご意見の投稿














虎カムバック
トラックバックURL

<<前ページ | ホーム | 次ページ>>