编程知识 cdmana.com

又到一年金三銀四,2021最新Java筆試題及答案,

Java就是個多線程的世界

1. 類的線程安全

我們經常說類是線程安全的,類是線程不安全的。那麼什麼樣的類才是線程安全的?

1.1 定義

多線程環境下,不管不同的線程如何使用和調度這個類,這個類總是錶現出正確的行為。那麼這個類就是線程安全的。
類的線程安全有兩個關鍵點:
1.操作的原子性
2.內存的可見性。

如果在多個線程中共享狀態,當同步機制不正確時,就會出現線程不安全的情况。

又到一年金三銀四,2021最新Java筆試題及答案,_程序員

簡單的程序應該不會有線程安全問題吧?

Q:什麼情况下會有線程安全問題

A:當某個實現多線程的線程類中有實例變量時

ps:有狀態,無狀態對象是什麼概念

有狀態就是有數據存儲功能。有狀態對象(Stateful Bean),就是有實例變量的對象?,可以保存數據,是非線程安全的。在不同方法調用間不保留任何狀態。

無狀態就是一次操作,不能保存數據。無狀態對象(Stateless Bean),就是沒有實例變量的對象?.不能保存數據,是不變類,是線程安全的。

又到一年金三銀四,2021最新Java筆試題及答案,_程序員_02

為什麼有線程安全問題?必須要先了解計算機原理

當多個線程同時共享,同一個全局變量或靜態變量,做寫的操作時,可能會發生數據沖突問題,也就是線程安全問題。但是做讀操作是不會發生數據沖突問題。

又到一年金三銀四,2021最新Java筆試題及答案,_程序員_03

舉個例子

從內存讀取1M數據 250微妙 = 250000納秒
CPU讀取一次內存 100納秒

又到一年金三銀四,2021最新Java筆試題及答案,_程序員_04

問:從內存中讀取1M的int型數據由CPU進行累加,耗時要多久?

答:
1M的數據,Java裏int型為32比特,4個字節
共有1024*1024/4 = 262144個整數
CPU 計算耗時:262144 *0.6 = 157 286 納秒

262144個整數從內存讀取到CPU,需要耗時
內存讀取耗時:262144*100+250000 = 26 464 400 納秒

怎麼解决線程安全問題?

線程安全問題,歸根到底一句話:在多線程之間修改共享數據引起的

又到一年金三銀四,2021最新Java筆試題及答案,_後端_05

並發編程——從入門到成仙

為了讓大家更好的理解學習線程並發,在這裏給大家推薦一個由華為資深架構師Mark老師講授的《並發編程——從入門到入仙》專題課程!從Java線程入門,到原子操作CAS與顯式鎖,再到並發安全,三天快速掌握並發編程核心知識,成為並發大神!

又到一年金三銀四,2021最新Java筆試題及答案,_後端_06

你以為這樣就完了?更多並發相關資料,一並奉上!

又到一年金三銀四,2021最新Java筆試題及答案,_後端_07

最後:學習總結——MyBtis知識腦圖(純手繪xmind文檔)

學完之後,若是想驗收效果如何,其實最好的方法就是可自己去總結一下。比如我就會在學習完一個東西之後自己去手繪一份xmind文件的知識梳理大綱腦圖,這樣也可方便後續的複習,且都是自己的理解,相信隨便瞟幾眼就能迅速過完整個知識,腦補回來。下方即為我手繪的MyBtis知識腦圖,由於是xmind文件,不好上傳,所以小編將其以圖片形式導出來傳在此處,細節方面不是特別清晰。但可給感興趣的朋友提供完整的MyBtis知識腦圖原件(包括上方的面試解析xmind文檔)

 CodeChina開源項目:【一線大廠Java面試題解析+核心總結學習筆記+最新講解視頻】

又到一年金三銀四,2021最新Java筆試題及答案,_程序員_08

除此之外,前文所提及的Alibaba珍藏版mybatis手寫文檔以及一本小小的MyBatis源碼分析文檔——《MyBatis源碼分析》等等相關的學習筆記文檔,也皆可分享給認可的朋友!

版权声明
本文为[程序員小明星]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/09/20210915063449395q.html

Scroll to Top