Java面試專題-多線程篇(2)- 鎖和線程池

 

開篇介紹面試

你們好,公衆號【Java極客思惟】近期會整理一些Java高頻面試題分享給小夥伴,也但願看到的小夥伴在找工做過程當中可以用獲得!本章節主要針對Java一些多線程高頻面試題進行分享。微信

 

Q1:多線程

樂觀鎖 和 悲觀鎖併發

樂觀鎖:app

樂觀鎖(Optimistic Locking)實際上是一種思想。相對悲觀鎖而言,樂觀鎖假設認爲數據通常狀況下不會形成衝突,所在數據進行提交更新的時候,纔會正式對數據的衝突與否進行檢測,若是發現衝突了,則讓返回用戶錯誤的信息,讓用戶決定如何去作。性能

 

悲觀鎖:this

Java在JDK1.5以前都是靠 synchronized 關鍵字保證同步的,這種經過使用一致的鎖定協議來協調對共享狀態的訪問,能夠確保不管哪一個線程持有共享變量的鎖,都採用獨佔的方式來訪問這些變量。獨佔鎖就是一種悲觀鎖,因此能夠說:synchronized是悲觀鎖 。spa

 

Q2:線程

synchronized內置鎖設計

用處:

synchronized做爲線程同步的關鍵字,設計到鎖的概念,Java內置鎖是一個互斥鎖,這就說明最多隻有一個線程可以得到該鎖,例如線程A 和 線程B,若是線程A嘗試去得到線程B的內置鎖,則線程A必須等待或者阻塞,直到線程B釋放這個鎖爲止;若是線程B永不釋放這個鎖,那麼線程A將永遠處於等待或者阻塞狀態。Java的對象鎖和類鎖在鎖的概念上,與內置鎖幾乎是一致的,可是對象鎖和類鎖的區別是很是大的。

 

對象鎖:

synchronized關鍵字修飾非靜態方法用synchronized(this)做爲同步代碼塊用synchronized(非this對象)的用法,鎖的是對象,線程想要執行對應的同步代碼,須要先得到對象鎖。

 

類鎖:

synchronized修飾靜態方法、用synchronized(類.class)的用法,鎖的是類,線程想要執行對應的同步代碼,須要先得到對象鎖。

 

對象鎖:鎖的是類的對象實例;

類鎖:鎖的是每一個類的Class對象,每一個類的Class對象在虛擬機中只有一個,因此類鎖也只有一個。

 

Q3:

樂觀鎖必定就是好的嗎?

樂觀鎖避免了悲觀鎖獨佔對象的現象,同時也提升了併發性能,可是也有如下幾個缺點:

1. 樂觀鎖只能保證一個共享變量的原子操做。若是多一個或者幾個變量,樂觀鎖將變得力不從心;

(但互斥鎖能輕易解決,無論對象數量多少以及對象顆粒度大小。)

2. 長時間自旋可能致使開銷大。假如CAS長時間不成功就會一直自旋,會給CPU帶來很是巨大的開銷

3. ABA問題。CAS的核心思想是經過對比內存值與預期值是否一致而判斷內存值是否被改動過,但這個判斷邏輯不夠嚴謹,例如:假如A同窗倒了一杯水放桌子上,而後有事去忙,此時B同窗通過,看到桌子上的水,而後喝了半杯,喝完後再將水打滿,實際看起來仍是一杯水,可是這杯水已經不是A同窗的那一杯水了,且實際上水是已經被B同窗改過了,這種狀況對依賴過程值的情景的運算結果影響很大。

解決的方案:經過引入版本號,每次變量更新都把版本號加1.

 

Q4:

線程池的啓動策略?

線程池的執行過程.png

1. 線程池剛建立時,裏面沒有一個線程。任務隊列是做爲參數傳進來的。不過就算隊列裏面有任務,線程池也不會立刻執行它們。

2. 當調用 execute() 方法添加一個任務時,線程池會作以下判斷:

  • 若是正在運行的線程數量小於 corePoolSize ,那麼立刻建立線程運行這個任務;

  • 若是正在運行的線程數量大於或等於 corePoolSize , 那麼將這個任務放入隊列;

  • 若是這時候隊列滿了,並且正在運行的線程數量小於 maximumPoolSize ,那麼仍是要建立線程運行這個任務;

  • 若是隊列滿了,並且正在運行的線程數量大於或等於 maximumPoolSize ,那麼線程池會拋出異常,告知調用者"我不能再接受任務了"。

3. 當一個線程完成任務時,它會從隊列中取下一個任務來執行。

4. 當一個線程無事可作,超過必定的時間 (keepAliveTime) 時,線程池會進行判斷,若是當前運行的線程數大於 corePoolSize ,那麼這個線程就會被停掉。因此線程池的全部任務完成後,它最終將會收縮到 corePoolSize 大小。

 

明天,會介紹多線程一些深刻的知識,長按二維碼關注我吧~

祝你們都能拿到心儀的offer!

 


點關注、不迷路

若是以爲文章不錯,歡迎關注點贊收藏,大家的支持是我創做的動力,感謝你們。

若是文章寫的有問題,請不要吝嗇,歡迎留言指出,我會及時覈查修改。

若是你還想更加深刻的瞭解我,能夠微信搜索「Java極客思惟」進行關注。天天8:00準時推送技術文章,讓你的上班路不在孤獨,並且每個月還有送書活動,助你提高硬實力!

相關文章
相關標籤/搜索