併發截圖版2

在這裏插入圖片描述
在這裏插入圖片描述
先找L1緩存,再找L2緩存,再找L3緩存。
在這裏插入圖片描述
在這裏插入圖片描述
緩存是按塊來讀的。緩存塊的大小叫做緩存行,固定大小64字節。
在這裏插入圖片描述
在這裏插入圖片描述
緩存一致性:緩存行在其他核更新時,本緩存如何更新?
在這裏插入圖片描述
緩存行的4中狀態。英特爾CPU使用MESI緩存一致性協議。

在這裏插入圖片描述
在這裏插入圖片描述
花3s時間。
對比:
在這裏插入圖片描述
在這裏插入圖片描述
只花了1.2s。
在這裏插入圖片描述
說明:兩個值非常近時,多線程訪問速度可能低。
在這裏插入圖片描述
加入填充後,x不可能與其他變量在同一個緩存行。因此改變時不需要通知其他緩存行。

有的源碼如下:
在這裏插入圖片描述
添加了無效字段的填充。


volatile:1.線程可見性
2.禁止重排序。


cpu速度是內存的100倍。


在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
原因是CPU會亂序執行。


DCL單例要不要加volatile。

在這裏插入圖片描述
在這裏插入圖片描述
DCL:Double Check Lock

這個單例還挺不錯的。
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
經典的DCL寫法。以下寫法是完美的。很多代碼都會用。
在這裏插入圖片描述
先判斷的時間非常短,比直接上鎖快很多。
在這裏插入圖片描述
注意上邊有一個volatile,必須加!!!
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
讀讀;寫寫;讀寫;寫讀;
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
1.Runnable線程沒有返回值。
2.Callable有返回值,返回值是Future。Future拿到結果需要阻塞。
3.Google的包:ListenableFuture。這個可以完美解決。
4.jdk1.8學習ListenableFuture,誕生了CompleteFuture,比ListenableFuture更叼。

在這裏插入圖片描述
在這裏插入圖片描述
中斷時需要cancel方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章