S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

今手が離せない!って感じ?

マルチスレッドで、あるオブジェクトが一生懸命仕事(無限ループで監視)しょうる最中は、他のオブジェクトから働きかけることができない、みたいなことになっとんかな?
入出力やsleepの処理を入れることで、他のスレッドから働きかけることができる…オブジェクトの値が、VMレベル?でキャッシュされとるとかってのは考えられるかもしれん。CPUとメモリの関係で、そういう細工をして処理効率を上げるってのがあるとすれば、入出力や処理待ちのタイミングでキャッシュではなく、メモリから再度読むみたいな。その時初めて、他のスレッドから書き込まれた値が参照できる…でもそんなんじゃったら、いろんな所で問題でそうじゃなぁ〜


Tomcatをstartup.batで動作させた場合は、Windowsコマンドプロンプト?なウィンドウに標準出力の内容が表示されてるから、そのときの動作でそういうキャッシュな動きが違うというところまで想像すると、今回の動作は強引かも知れんけど納得できる。
サービスで動作させた場合も、標準出力をファイルにして書いてるから、そこでなんか違うということまで前提になっちゃうけど。
そもそも、Windows版でjavacoreを出力するためには、startup.batで動作させんとおえんっちゅう時点で、全然違う理由にしても、なんかそういうのがあるような気がしてきた。

本来はinterruptとかで実現すべきなんじゃろか?あるいは監視を自分自身のオブジェクトの値ではなく、キックしたスレッドのオブジェクトの値で監視するようにした方がえんじゃろか?
一応外からは隠蔽されとるから、局所的な問題ということで、様子見ながら考えよ。


念のため、スレッドセーフな問題も考えてみたけど、登録処理毎にオブジェクトを生成しているため、とりあえず問題ないハズ。