并发编程 笔记
2019獨角獸企業重金招聘Python工程師標準>>>
volatile是一個類型修飾符(type specifier).volatile的作用是作為指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值。volatile是輕量級鎖(無鎖同步),sychonised是重量級鎖,volatile效率遠高于sychonised。
具體實現:緩存值過期通知。
cpu忙時,直接使用緩存中的內容,而在cpu閑的時候才會去主存中重新讀取數據。而加上volatile,則該屬性變更時,將會通知所有使用它的緩存來更新值。
加了volatile,線程之間是可見的。
而不加volatile只能用sychonized,效率低。
?
volatile和sychonised區別
1.volatile效率遠高于sychonised
2.volatile不可完全替代sychonised,因為volatile只能保證可見性,但是sychonised除了保證可見性,還能保證原子性。
?
Atomic開頭的操作,可以代替簡單的sychonised,效率比synchronized高。
細粒度的鎖比粗粒度的鎖效率高很多。
sychonized鎖的到底是什么?
sychonised鎖的不是棧內存的句柄,而是句柄所指向的堆內存中的對象實體,所以如果我們鎖住了對象o,但之后又對o賦值new Object(),那么o將可以再次被進入,因為句柄o所指向的實體已經不是原來那個了。
所以o的原來的實體和新的實體分別鎖住了兩個實體。
同理可以考慮得出字符串常量不能作為鎖,因為對于常量不同的句柄可以指向同一個對象,如s1="hello",s2="hello",不同的同步方法可能都需要字符串常量“hello”加鎖,可能導致死鎖。
?
轉載于:https://my.oschina.net/u/3786691/blog/1927673
總結
                            
                        - 上一篇: linux 查看服务器性能常用命令
 - 下一篇: 字节流输入输出代码