java併發學習_day01

一、什麼是併發:簡單的理解就是在同一時間內分別完成不同任務的統一操作,用程序的理解就是在一個時間片段內,同時啓動到運行完畢,並且是在統一機制下面完成的。

二、開始學習

1.同步(Synchronous) 和異步(Aynchronous)的區別:

1)同步:一旦開始除非完成纔會返回信息,並且開始下一步的操作。我們可以瞭解爲蓋樓房,必須下面的樓層蓋完了纔會蓋上一層,不會直接就將頂樓蓋好了。

2)異步:一開始任務的時候就可以立即執行下一步的操作了,這裏和同步是不一樣,就像我們廣播一條通知告訴村民們來居委會來居委會領大米,就等村民來居委會領取大米。

2.併發和並行的區別:

1)併發:併發在執行的過程中有可能是交替執行的也有可能是串行的。

2)並行:表示用一時間內所有任務一起開始執行。

3.死鎖(Deadlock),飢餓(Starvation)和活鎖(Livelock):死鎖,飢餓,活鎖都是表示多線程的活躍狀態的表示

1)死鎖:表示個個線程都在暫用資源不願意釋放導致了後面的線程無法執行。因爲線程對資源的訪問是排他的,一旦有某個線程暫用了該資源其餘線程想要使用該資源那麼久要等到這個資源被釋放了纔會被其餘線程來使用,否則會一直這樣等待。發生死鎖的條件是資源的暫用形成了“迴路”

2)飢餓:表示因爲線程無法獲取資源而導致了線程的不執行。比如:線程t1正在使用z資源,線程t2申請了z資源,這時候t3也來申請了z資源,t1釋放了資源系統優先給了t3,這時候t4又來申請了z資源。。。導致了t2無法使用到資源導致的。

3)活鎖:表示多個線程都有機會使用該資源,但是讓給了別的線程使用導致了線程一直未被使用。

4.並行程序學習:我們先來了解一下線程和進程的關係,線程構建了進程,線程是進程的最小單位。

1)線程有五種狀態分別是:
新建狀態(New)當用new操作符創建一個線程時, 例如new Thread(r),線程還沒有開始運行,此時線程處在新建狀態。 當一個線程處於新生狀態時,程序還沒有開始運行線程中的代碼。
就緒狀態(Runnable):一個新創建的線程並不自動開始運行,要執行線程,必須調用線程的start()方法。當線程對象調用start()方法即啓動了線程,start()方法創建線程運行的系統資源,並調度線程運行run()方法。當start()方法返回後,線程就處於就緒狀態。
  運行狀態(Running):當線程獲得CPU時間後,它才進入運行狀態,真正開始執行run()方法.
  阻塞狀態(Blocked):所謂阻塞狀態是正在運行的線程沒有運行結束,暫時讓出CPU,這時其他處於就緒狀態的線程就可以獲得CPU時間,進入運行狀態
   死亡狀態(Dead): 有兩個原因會導致線程死亡
        1) run方法正常退出而自然死亡,
        2) 一個未捕獲的異常終止了run方法而使線程猝死。
        爲了確定線程在當前是否存活着(就是要麼是可運行的,要麼是被阻塞了),需要使用isAlive方法。如果是可運行或被阻塞,這個方法返回true; 如果線程仍舊是new狀態且不是可運行的, 或者線程死亡了,則返回false.
  
  
 



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