好程序員Java學習路線之Java并發(fā)

好程序員Java學習路線之Java并發(fā)

長沙達內(nèi)教育      2022-04-18 09:21:01     2

好程序員Java學習路線之Java并發(fā),  好程序員Java學習路線之Java并發(fā)編程,什么是并發(fā)編程?用戶通常認為計算機在同一時刻可以做多個事情是理所當然的事情?! ?

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細介紹

  好程序員Java學習路線之Java并發(fā)編程,什么是并發(fā)編程?用戶通常認為計算機在同一時刻可以做多個事情是理所當然的事情。

  例1:例如你可以一邊聽音樂,一邊玩游戲,同時還通過聊天工具和別人聊天。假設你使用的qq音樂播放器在聽音樂,玩的是q-q斗地-主游戲,使用q-q和別人聊天,那么這實際上是三個不同的軟件在同時運行,完成三個不同的事情。

  例2:當然我們也不能否認,在一個軟件內(nèi),同時可以完成以上三個事情:聊天、游戲和音樂。例如你在玩q-q斗地-主,以便在打牌,播放了背景音樂,同時你還可以和其他牌友聊天,發(fā)一句"我等的花兒也謝了",這實際上是一個軟件可以同時完成三個不同的事情。

  不管是那種情況,我們應該知道的是,并發(fā)編程指的是在同一時刻執(zhí)行多個任務。

  java并發(fā)基礎

  線程本身有很多優(yōu)勢,比如可以發(fā)揮多處理器的強大能力、建模更加簡單、簡化異步事件的處理、是用戶界面的相應更加靈敏,但是更多的我們面對的是安全性問題,例如:

  public class Concurrence{ private int value; public int getValue(){ return value++; }}

  Concurrence的問題在于,如果執(zhí)行時機不對,那么兩個線程在調(diào)用getValue時會得到相同的值。

  雖然遞增運算value ++ 看上去是單操作,但是它包含了三個獨立的操作: 讀取Value、value + 1 、計算結(jié)果寫入Value。由于運行,可能將多個線程之間的操作交替執(zhí)行,因此這兩個線程可能同事執(zhí)行讀取操作,從而使它們得到相同的值,并都將這個值加1。結(jié)果就是,在不同線程的調(diào)用中返回了相同的值。

  在Concurrence中說明的是一種常見的并發(fā)安全問題,稱為競態(tài)條件。當某個計算的正確性取決于多個線程的交替執(zhí)行時序時,那么就會發(fā)生競態(tài)條件。

  Java并發(fā)性和多線程介紹

  在過去單CPU時代,單任務在一個時間點只能執(zhí)行單一程序。之后發(fā)展到多任務階段,計算機能在同一時間點并行執(zhí)行多任務或多進程。雖然并不是真正意義上的“同一時間點”,而是多個任務或進程共享一個CPU,并交由操作系統(tǒng)來完成多任務間對CPU的運行切換,以使得每個任務都有機會獲得一定的時間片運行。

  隨著多任務對軟件開發(fā)者帶來的新挑戰(zhàn),程序不在能假設獨占所有的CPU時間、所有的內(nèi)存和其他計算機資源。一個好的程序榜樣是在其不再使用這些資源時對其進行釋放,以使得其他程序能有機會使用這些資源。

  再后來發(fā)展到多線程技術(shù),使得在一個程序內(nèi)部能擁有多個線程并行執(zhí)行。一個線程的執(zhí)行可以被認為是一個CPU在執(zhí)行該程序。當一個程序運行在多線程下,就好像有多個CPU在同時執(zhí)行該程序。

  多線程比多任務更加有挑戰(zhàn)。多線程是在同一個程序內(nèi)部并行執(zhí)行,因此會對相同的內(nèi)存空間進行并發(fā)讀寫操作。這可能是在單線程程序中從來不會遇到的問題。其中的一些錯誤也未必會在單CPU機器上出現(xiàn),因為兩個線程從來不會得到真正的并行執(zhí)行。然而,更現(xiàn)代的計算機伴隨著多核CPU的出現(xiàn),也就意味著不同的線程能被不同的CPU核得到真正意義的并行執(zhí)行。

  如果一個線程在讀一個內(nèi)存時,另一個線程正向該內(nèi)存進行寫操作,那進行讀操作的那個線程將獲得什么結(jié)果呢?是寫操作之前舊的值?還是寫操作成功之后的新值?或是一半新一半舊的值?或者,如果是兩個線程同時寫同一個內(nèi)存,在操作完成后將會是什么結(jié)果呢?是第一個線程寫入的值?還是第二個線程寫入的值?還是兩個線程寫入的一個混合值?因此如沒有合適的預防措施,任何結(jié)果都是可能的。而且這種行為的發(fā)生甚至不能預測,所以結(jié)果也是不確定性的。

  以上就是長沙達內(nèi)教育java培訓班給大家做的內(nèi)容詳解,更多關(guān)于java的學習內(nèi)容,請隨時關(guān)注長沙達內(nèi)教育java學院官網(wǎng)?;蜃稍冊诰€客服,有專業(yè)老師為你服務。

Java學習路線 Java學習

培訓啦提醒您:交易時請核實對方資質(zhì),對于過大宣傳或承諾需謹慎!任何要求預付定金、匯款等方式均存在風險,謹防上當。