[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] Re: JDK1.2でのThread.stopを調べていて
In article <199903041759.CAA09492@xxxxxxxxxx>
Toru Takahashi wrote:
>private volatile Thread blinker;
>:
>public void run() {
> Thread thisThread = Thread.currentThread(); // ここの行がなぜ必要?
> while(blinker == thisThread) {
(while内復元します)
try {
thisThread.sleep(interval);
} catch (InterruptedException e){
}
repaint();
> }
>}
>:
>public void stop() {
> blinker = null;
>}
>
>別スレッドの処理を終えるときにblinkerをnullにすればrun()が終わるのは分るの
>ですが、
>run()メソッドの最初の行でなぜcurrentThread()を取得してblinkerと比較させてい
>るのか
>分かりませんでした。自分で書くなら、
> while(blinker != null) {
>と書いてしまいますが。
> while(blinker == thisThread) {
と
> while(blinker != null) {
の違いは、あの記述だけを見た限りでは同じと言えます.
あのサンプルコードは、blinkerに一度しかThreadオブジェクトしか入らな
いという前提で書かれているわけではないために
> while(blinker == thisThread) {
こうなっているのではないでしょうか.
例えばstop()メソッドでblinker = null;が実行されて、run()側のwhile文
を抜ける前に別の個所でblinkerに新たなThreadが設定されて、再実行が行
われるかもしれません.
その場合、
> while(blinker != null) {
だと最初のThreadが終わってくれないということになりますね.
# もっと深い意味があるかもしれませんが.
因みに、
> Thread thisThread = Thread.currentThread(); // ここの行がなぜ必要?
は単にcurrentThread()を二回(whileの中でも)使用しているから、と見てい
ますがどうでしょう...
# while内でsleep()がblinkerではなくthisThreadに対して行う必要がある
# ことは説明不要ですもんね.
=====================================
木下 信@イデア
=====================================