[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/ )