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

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



  高橋(智)です。
 
"TAKAHASHI,Toru" wrote:
> > volatile変数もsynchronizedメソッドも使っていない場合は,
> > 他スレッドの影響を無視することが許されるし,実行順序も変更できますよね.
> 確かにcounterをvolatileにすればHotSpot Server VMでも終了するように
> なりました。

  同じ環境 CPU(AMD Opteron) x 2, WindowsXP(x64 Edition), J2SE 5.0 Update6(ServerVM) で
以下のように書き換えたものを実行してみたのですが、やはり終了しません。t1.join(); が戻って
来ません。

public class SharedCounterIncrementor implements Runnable {

    public void run() {
        int numIncremented = 0;
        while (true) {
            numIncremented++;
            if (Thread.currentThread().isInterrupted()) {
                System.out.printf("I have incremented %d times%n", numIncremented);
                return;
            }
        }
    }

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

-- 
高橋智宏
  Java読書会( http://www.javareading.com/bof/ )