多線程基礎(主要內容轉載於https://segmentfault.com/a/1190000014428190)

  • 進程做爲資源分配的基本單位
  • 線程做爲資源調度的基本單位,是程序的執行單元,執行路徑(單線程:一條執行路徑,多線程:多條執行路徑)。是程序使用CPU的最基本單位。
  • 線程有3個基本狀態java

    • 執行、就緒、阻塞(還有新生,死亡)

    線程有5種基本操做多線程

    • 派生、阻塞、激活、 調度、 結束
    • 線程有兩個基本類型併發

      • 1) 用戶級線程:管理過程所有由用戶程序完成,操做系統內核心只對進程進行管理。
      • 2) 系統級線程(核心級線程):由操做系統內核進行管理。操做系統內核給應用程序提供相應的系統調用和應用程序接口API,以使用戶程序能夠建立、執行以及撤消線程。
      • 注意:當用戶級線程都結束時,jvm虛擬機就會結束,無論保護線程是否還在運行;
      • 線程的屬性:jvm

        • 1)輕型實體;
        • 2)獨立調度和分派的基本單位;
        • 3)可併發執行;
        • 4)共享進程資源
        • 值得注意的是:多線程的存在,不是提升程序的執行速度。其實是爲了提升應用程序的使用率,程序的執行其實都是在搶CPU的資源,CPU的執行權。多個進程是在搶這個資源,而其中的某一個進程若是執行路徑比較多,就會有更高的概率搶到CPU的執行權(注意:有阻塞的出現,纔會使用多線程,即在一個線程發生阻塞時,其餘線程能夠繼續使用CPU)
        • 經過上面的頂部註釋咱們就能夠發現,建立多線程有兩種方法:spa

          • 繼承Thread,重寫run方法
          • 實現Runnable接口,重寫run方法
          • Java實現多線程須要注意的細節

            不要將run()start()搞混了~操作系統

            run()和start()方法區別:線程

            • run():僅僅是封裝被線程執行的代碼,直接調用是普通方法
            • start():首先啓動了線程,而後再由jvm去調用該線程的run()方法。

            jvm虛擬機的啓動是單線程的仍是多線程的?code

            • 是多線程的。不單單是啓動main線程,還至少會啓動垃圾回收線程的,否則誰幫你回收不用的內存~

            那麼,既然有兩種方式實現多線程,咱們使用哪種???blog

            通常咱們使用實現Runnable接口繼承

            • 能夠避免java中的單繼承的限制
            • 應該將併發運行任務和運行機制解耦,所以咱們選擇實現Runnable接口這種方式!
相關文章
相關標籤/搜索