java線程入門篇(一)

1、線程的相關概念

    1.同步和異步多線程

        用一次方法調用來講:併發

            同步方法一旦調用開始,便必須等到方法調用返回後,才能繼續後面的行爲。異步

            異步方法更像是一個消息傳遞,一旦開始,方法調用就會當即返回,調用者就能夠繼續後續的操做。異步方法一般會在另一個線程中"真實"地運行。整個過程,不會阻礙調用者的工做。spa

        示例:線程

            淘寶上購物,咱們只須要把商品加入購物車,付款就行了,其餘物流配送的環節都是異步執行的。資源

    2.併發和並行同步

        併發:多個任務交替運行淘寶

        並行:多個任務平行的運行並行

        一個CPU的話,確定是併發。並行只能發生在多個CPU的狀況下。方法

    3.臨界區

        臨界區來表示一種公共資源或者是共享數據,能夠被多個線程使用。可是每一次,只能有一個線程使用它,一旦臨界區資源被佔用,其餘線程想要這個資源,就必須等待。

        舉例:

            一個辦公室只有一臺打印機,小名和小剛同時須要打印文件,很顯然,只能一個一個來。這裏的打印機的例子就是一個臨界區。

    4.阻塞和非阻塞

        阻塞和非阻塞一般用來形容多線程間的相互影響。好比一個線程佔用了臨界區資源,那麼其餘全部須要這個資源的線程就必須在這個臨界區中進行等待。等待會致使線程掛起,這種狀況就是阻塞。此時,若是佔用資源的線程一直不肯意釋放資源,那麼其餘全部阻塞在這個臨界區上的線程都不能工做。

        非阻塞的意思與之相反,他強調沒有一個線程能夠妨礙其餘線程執行。全部的線程都會嘗試不斷向前執行。

    5.死鎖、飢餓 、活鎖

        死鎖: A車想入庫,B車想出庫。結果誰也不讓誰。這時候就是死鎖。

        飢餓: 某個線程因爲種種緣由沒法得到想要的資源,致使一直沒法執行。好比他的線程優先級太低,而高優先級的線程不斷搶佔他的資源,致使低優先級線程沒法工做。

            舉例:天然界中,母鳥餵食雛鳥時,很容易出現這種狀況。因爲雛鳥比較多,食物有限,雛鳥之間的競爭可能很激烈,小雛鳥由於常常搶不到食物,可能被餓死。

        活鎖:

相關文章
相關標籤/搜索