05.20 Java編程細節——多線程同步的理解

多線程同步是指多個線程訪問鎖定的代碼段時,必須按照每個線程獲取該代碼段鎖的順序執行。

更多Java 相關細節知識請《關注我》,歡迎評論歡迎轉發

輪詢List的線程是怎麼寫的?直接開一個線程有什麼需要注意的地方嗎?什麼時候對線程進行銷燬?

  • 輪詢List:List為空時,通過wait將輪詢線程阻塞;List不為空時,通過notify將輪詢線程喚醒。

  • 開啟線程的注意點:1)同一個Thread子類只能開啟一個線程(Start一次),2)同一個Runnable實現類可以開啟多個線程(Start多次),實現線程內部資源共享,3)線程是否為死循環,4)線程何時銷燬

  • 何時銷燬線程:保證線程執行完,然後自動銷燬

Java編程細節——多線程同步的理解

講講多線程裡面的原子性和可見性

  • synchronized或者cas實現原子操作。

  • volatile保證可見性。

volatile能保證有序性嗎

  • 只能保證一定程度上的有序性。對於被volatile修飾的變量A可以保證有序性,與變量A無關的代碼無法保證

  • 通過設置內存屏障(lock操作)保證變量A的有序性。加入volatile關鍵字時,會多出一個lock前綴指令,lock前綴指令實際上相當於一個內存屏障(也成內存柵欄),內存屏障會提供3個功能:

1)它確保指令重排序時不會把其後面的指令排到內存屏障之前的位置,也不會把前面的指令排到內存屏障的後面;即在執行到內存屏障這句指令時,在它前面的操作已經全部完成;

2)它會強制將對緩存的修改操作立即寫入主存;

3)如果是寫操作,它會導致其他CPU中對應的緩存行無效。

Java編程細節——多線程同步的理解

更多Java 相關細節知識請《關注我》,歡迎評論歡迎轉發


分享到:


相關文章: