[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 12438] Re: SharedCounter の実験 (1) - 再送



遠藤です。

> Threadクラスのinterrupt()、isInterrupted()が可視性の保証をしているのか
> 検討してみたいと思っています(今回の最適化の動きからすると、保証しなくて
> もよいものかもしれません)。

可視性が保障されていないとすると
こんな風にしないといけないのでしょうか。。。

たしかにこれならserver vmでも終了しましたが。
synchronizedをコメントアウトすると
終了しませんでした。

環境:
JDK 1.5.0_08
CPU 1つ
VM  Server VM


public class SharedCounterIncrementor implements Runnable {

    public void run() {
        while (true) {
            Thread t = Thread.currentThread();
            synchronized(t) {
                if (t.isInterrupted()) {
                    System.out.println("interrupted");
                    return;
                }
            }
        }
    }

    public final static void main(final String[] args) throws Exception {
        SharedCounterIncrementor sci = new SharedCounterIncrementor();
        Thread t1 = new Thread(sci);
        t1.start();
        Thread.sleep(3000);
        synchronized(t1) {
            t1.interrupt();
        }
        t1.join();
    }
}



-- 
// Y. Endoh