一、可見性
public
class
public
void
load()
catch (interruptedexception e) */
/** * 3、println,也可以跳出while迴圈 -------- 能
* synchronized 可見性保證 記憶體屏障
*/"-----------");
/** * 4、shortwait()休眠納秒
*///休眠1秒 ----- 能
//shortwait(1000000); 快取是否失效,執行緒棧中的快取有個過期時間
//休眠0.1秒 ---- 不能
//shortwait(1000);
} system.out.
println
(thread.
currentthread()
.getname()
+"jump for: i= "
+ i);}
public
static
void
main
(string[
] args)
catch
(interruptedexception e)
}//1毫秒=1000微秒 1毫秒=1000 000納秒
上圖中是硬體架構,其實jmm記憶體模型和這個模型是一樣的,只不過jmm操作的各個邏輯塊,其實底層都是和上面的各個硬體有對映關係。
volatile的可見性其實就是利用了快取一致協議(鎖快取行)(mesi)(m:修改
修改當前快取中的共享變數對於當前執行緒來說是執行緒安全的,但是對被volatile修飾的變數來說,多個執行緒共同操作這個變數的時候,這個過程就不是執行緒安全的,所以volatile並不是執行緒安全的。下面是乙個例子
private
static
volatile
long sum =0;
public
static
void
main
(string[
] args)})
.start()
;}system.out.
println
(sum)
;//sum每次輸出來的值,都不是我想要的
}
注意:如果多個核的執行緒在操作同乙個快取行中的不同變數資料,那麼就會出現頻繁的快取失效,即使在**層面看這兩個執行緒操作的資料之間完全沒有關係。這種不合理的資源競爭情況就是偽共享
public
class
falsesharing
catch
(interruptedexception e)
}private
static
void
testpointer
(pointer pointer)
throws interruptedexception })
; thread t2 =
newthread((
)->})
; t1.
start()
; t2.
start()
; t1.
join()
; t2.
join()
; system.out.
println
(system.
currenttimemillis()
- start);}
}class
pointer
二、有序性(實現了相當於記憶體屏障的功能)
public
class
reorder}}
return myinstance;
}public
static
void
main
(string[
] args)
}
為什麼會有重排序呢???
從上圖中可以看出來(1)(2)執行的結果都一樣,但是對應的資料載入的指令卻不一樣,乙個load代表從記憶體中載入一次資料通過快取記憶體到cpu的過程,如果有重排序,那麼就會減少一次這樣的過程,這樣的效能就比較高
兩大搜尋 tu的遍歷
在我們遇到的一些問題當中,有些問題我們不能夠確切的找出數學模型,即找不出一種直接求解的方法,解決這一類問題,我們一般採用搜尋的方法解決。搜尋就是用問題的所有可能去試探,按照一定的順序 規則,不斷去試探,直到找到問題的解,試完了也沒有找到解,那就是無解,試探時一定要試探完所有的情況 實際上就是窮舉 深...
GRE考試寫作的兩大技巧
gre寫作技巧運用好gre寫作范文,它是最好的備考素材,gre閱讀部分的文章也是我們有針對性地閱讀的乙個素材庫,要扎扎實實地提高英語gre考試寫作水平,就必須要以扎扎實實的閱讀量為前提之一,必須體會地道的 漂亮的語言是怎麼寫出來的,通過對范文的語言內容和邏輯的理解來學習gre考試寫作中詞彙的使用 句...
django中queryset的兩大特性
roles roleinfo.objects.all 建立查詢集的時候,是不會訪問資料庫的,直到真正的呼叫資料的時候,才會訪問資料庫,所以 roles roleinfo.objects.all 沒有真正的進行資料庫查詢的,只是建立了乙個資料庫查詢集 呼叫資料,真正的使用資料 1 迭代 2 序列化 3...