一、什麼是併發:簡單的理解就是在同一時間內分別完成不同任務的統一操作,用程序的理解就是在一個時間片段內,同時啓動到運行完畢,並且是在統一機制下面完成的。
二、開始學習
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.並行程序學習:我們先來了解一下線程和進程的關係,線程構建了進程,線程是進程的最小單位。
2) 一個未捕獲的異常終止了run方法而使線程猝死。
爲了確定線程在當前是否存活着(就是要麼是可運行的,要麼是被阻塞了),需要使用isAlive方法。如果是可運行或被阻塞,這個方法返回true; 如果線程仍舊是new狀態且不是可運行的, 或者線程死亡了,則返回false.