ftang
版主
发贴: 214
积分: 38
|
于 2006-06-23 01:58
Atomicity: 不好意思没有找到定义,只能给出我的理解了,就是对一个原子类型的操作是不会被另外一个线程所打断.
在JAVA里面所谓”内置“数据类型有几类是原子类型的,但是long 和 double 不是,因为他们的长度是64位,而JVM内存处理在32位,所以long和 double 不是原子类型,切记,切记 --> 原子类型应该就是指java内置的数据类 <-- 是不对的
给出一段代码
public class BreakDouble extends Thread { final static double VAL1 = 0; final static String VAL1S = Double.toString(VAL1); final static double VAL2 = Double.MAX_VALUE; final static String VAL2S = Double.toString(VAL2); static double test = VAL1; public static void main( String[] args ) { System.out.println("VAL1 = " + VAL1S ); System.out.println("VAL2 = " + VAL2S ); System.out.println("\nErrors:"); for (int i=0; i<10;i++) { BreakDouble t = new BreakDouble(); t.start(); } } public void run() { for( ;; ) { double tmp=test; test = VAL1; String tmpTest=Double.toString(tmp); if( (!tmpTest.equals(VAL1S)) && (!tmpTest.equals(VAL2S)) ) { System.out.println("test = " + tmpTest ); } test = VAL2; } } }
pi178c1n5 /ms/user/shen/temp 196$ java BreakDouble VAL1 = 0.0 VAL2 = 1.7976931348623157E308
Errors: test = 2.1219957905E-314 test = 1.7976922776554302E308 test = 2.1219957905E-314 test = 1.7976922776554302E308
|