Java知識點梳理:多線程

synchronized

  保證線程安全

volatile

具有可見性、有序性,不具備原子性(很容易讀到髒數據)。禁止指令重排。
https://www.infoq.cn/article/java-memory-model-4
在這裏插入圖片描述
Volatile修飾的成員變量在每次被線程訪問時,都強迫從共享內存中重讀該成員變量的值。而且,當成員變量發生變化時,強迫線程將變化值回寫到共享內存。這樣在任何時刻,兩個不同的線程總是看到某個成員變量的同一個值。

在兩個或者更多的線程訪問的成員變量上使用volatile。當要訪問的變量已在synchronized代碼塊中,或者爲常量時,不必使用。

wait、join、notify

CountDownLatch

一組線程完成後進行其他操作,如統計等

ThreadLocal

Synchronized用於線程間的數據共享,而ThreadLocal則用於線程間的數據隔離。

ThreadLocal不能解決併發問題,主要用途是爲了保持線程自身對象和避免參數傳遞

應用場景:
在線程中存放一些就像session、數據庫連接等的特徵變量,會針對不同的線程,有不同的值。

一句話理解ThreadLocal:向ThreadLocal裏面存東西就是向它裏面的Map存東西的,然後ThreadLocal把這個Map掛到當前的線程底下,這樣Map就僅僅屬於這個線程了。

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