為什麼說 JAVA中的ThreadLocal是最簡單的非阻塞同步 ?

時間 2021-05-06 11:24:28

1樓:Joash

ThreadLocal是存在於Thread類中的資料結構。它用於遮蔽自己的資料,防止其他執行緒訪問。然而同步問題所涉及的不僅僅是乙個執行緒或者是程序。

同步的出現必定涉及到了執行緒或程序間的共享資源。對比兩個概念真的沒有發現有什麼共同之處。multithreading ThreadLocal經典實現原理,有興趣可以看看。

2樓:陳剛

所謂的阻塞,非同步,鎖,前提是多執行緒併發訪問同一物件。

而ThreadLocal是執行緒的本地變數,執行緒A是訪問不了執行緒B的Treadlocal的。

ThreadLocal的作用不是多執行緒間共享資源,而是單執行緒內部各個類共享資源,每個執行緒的ThreadLocal都是乙個new Map。

3樓:長纓在手

樓主,TreadLocal不是為了解決併發同步用的,是為了隔離變數用的。

同步是為了讓多個執行緒共同操作乙個物件而不亂掉,而ThreadLocal直接就把某個物件在各自執行緒中重新例項化乙個了,各個執行緒都有自己的該物件,所以就不用管同步不同步了。

為什麼說java雙重檢查 double check 可能會失效?

前提實在jdk1.5之前會失效。jdk1.5之後,instance如果被宣告成volatile的成員 private static volatile Singleton instance null 則不會出現題主所說的 失效 性問題。這是因為jdk1.5之後的版本都增強了JMM volatile變數...

為什麼說 C 語言比 Java 難?

對於工具,我們關注兩個屬性 使用難度和造物難度 初學者一開始肯定是學習使用,很自然的對比使用難度,c無法比誰都簡單,沒有很多的概念,但是造物就不好說了,由於缺乏各種特性,導致幾乎什麼功能你都要自己實現,如果你沒有很合適的庫,有時候實現同乙個功能,難度要大很多。 runner time 你咋就不明白自...

在Java中,為什麼override(重寫或覆蓋)必須有相同的引數列表,這背後的內在機理是什麼?

舒琴 思考一下 如果覆寫不需要相同的引數列表,當父類有多個過載方法 函式名一樣但引數列表不一樣 子類去覆寫的時候,編譯器應該呼叫哪乙個? 上面回答已經基本完備了。你要是學了Golang,就沒有這個疑問了,GO中同乙個包不允許有同名函式。即同名不同引數列表也不行 Aetherus 甲 為什麼巧克力蛋糕...