我是Java線程的新手,最近纔開始閱讀內存模型。從我對Java內存模型的理解中可以看出,編譯器可以進行優化。Java內存模型和成功的布爾值
這可能會使多線程代碼和同步變得複雜,但我的問題是爲了更簡單的事情。以這個例子爲例,因爲這兩個語句並不相互依賴,編譯器是否有可能改變try語句中代碼的排序並因此中斷檢查?
boolean success = false;
try{
MyClass.someFunction();
success = true;
}
catch(Exception e){
}
if(success){
System.out.println("Sucess!");
}
else{
System.out.println("Fail!");
}
+1 - 爲了指出其他語言也具有此屬性;例如C和C++。 (這是大量多線程C/C++程序出錯的原因之一,尤其是在編譯時使用更高的優化級別。) – 2010-11-08 04:39:22